Depth First Search,DFS
深度优先搜索,每一步都将后面的每种可能执行到底
使用递归来进入下一步
基本格式为
void dfs(int step)
{
判断边界
尝试每一种可能 for(i=1;i<=n;i++)
{
递归下一步 dfs(step+1);
}
return;
}
输出1-n的全排列为例使用DFS
//深度优先搜索尝试全排列
#include<stdio.h>
int a[10],book[10],n;
//!C语言中全局变量在没有赋值时默认为0
//此处book[]数组无需初始化
void dfs(int step)
{
int i;
//这一步即为模板中的判断边界
//在后面的递归中每次判断是否已经运行到最后
if(step==n+1)
{
for(i=1;i<=n;i++)
printf("%d",a[i]);
printf("\n");
return;
}
for(i=1;i<=n;i++)
{
if(book[i]==0)//判断这个数是否在前面已经出现
{
a[step]=i;
book[i]=1;//标记该数字表示已经使用
//进行递归实现该数后面的排列
dfs(step+1);
book[i]=0;//结束本次i的尝试
}
}
return;
}
int main()
{
scanf("%d",&n);
dfs(1);//从1开始搜索
getchar();getchar();
return 0;
}