一:此种方法适合解决的问题是深度优先遍历和回溯
一:此种方法适合解决的问题是深度优先遍历和回溯
void dfs(参数)
{
if(搜到了)
{
计数或进行其他操作;
return;
}
for(查找当前节点的周围的节点)
{
进行其他的操作;
标记已经搜索过的节点;
dfs(下一次搜索的节点);
取消标记;
}
}
例如求1~N的全排列问题
#include<stdio.h>
#include<iostream.h>
int a[6];
int k=0;
int ans=0;
void dfs(int x)
{
if(x==4)
{
ans++;
return;
}
for(int i=1;i<=5;i++)
{
if(a[i])
{
a[i]=0;
dfs(x+1);
a[i]=1;
}
}
}
int main()
{
for( k=0;k<6;k++)
a[k]=1;
dfs(0);
printf("%d\n",ans);
return 0;
}
此种思路是解决一些搜索问题的很重要的思想,如八皇后问题,还有一些可以转化为相似的问题。