请问下面代码中v[i]=0是什么时候执行的,深搜回朔是怎么实现的
//代码的功能为输出全排列#include<iostream>
using namespace std;
int n,a[100],v[100];
//a数组用于保存每一次的排列,v数组用于判断数字是不是已经被选过
void dfs(int dp)//dp从1到n,执行n次,每次选择一个数
{
if(dp>n)//dp为n+1的时候,就说明已经选了n个,可以输出了;
{
for(int i=1;i<=n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
return;
}
for(int i=1;i<=n;i++)
{
if(!v[i])//判断是不是选择过
{
a[dp]=i;//保存当前选择
v[i]=1;//标记这个数字,防止同一个排列选择相同的数字。
dfs(dp+1);
v[i]=0;//回溯回来的时候一定要清楚标记,不然下一个排列就能选择了,这也是最关键的地方,仔细思考一下。
}
}
}
int main()
{
while(cin>>n)
{
dfs(1);
}
}