目录
一般错误:
dfs一般使用递归,在我们使用时,经常会出现如下的错误代码:
bool vis[10010]={false};
void dfs(int n){
if(到达边界){
return;
}
for(执行条件){vis[变量]=true;dfs(下一层);}
}
实际上,在第六行少了一行代码:
应该在“dfs(下一层)”后面释放vis数组,即vis[变量]=false;
例如全排列:
#include <iostream>
#include<iomanip>
using namespace std;
int n;
int r;
int a[250]={0};
bool b[250]={0};
void print()
{
for(int i=1;i<=r;i++)
{
cout<<setw(3)<<a[i];
}
}
void search(int t)
{
for(int i=1;i<=n;i++)
{
if(i>a[t-1]&&!b[i])
{
a[t]=i;
b[i]=1;
if(t==r) {print();cout<<endl;}
else search(t+1);
b[i]=0;
}
}
}
int main()
{
cin>>n>>r;
search(1);
return 0;
}
少了第25行就是错误的。