深度优先搜索之1-9中的数字全排列
输入3
输出
123
132
213
231
312
321
#include<stdio.h>
int a[10],book[10],n;/*C语言的全局变量在没有赋值以前默认为0,因此这里的book数组不用全部再次赋初始值0*/
void dfs(int step)//step表示要排列的位置
{
int i;
if(step==n+1)//如果要排列第n+1个位置,那么表示前n个盒子已经放好数字
{
//输出一种排列(第1-n位置上的数字的序号)
for(int i=1; i<=n; i++)
printf("%d",a[i]);
printf("\n");
return ;//返回之前的一步(最后一次调用电dfs的地方)
}
//按照1.2.3...n的顺序一一尝试应该放放入数字
for(int i=1; i<=n; i++)
{
//判断要排列的数字是否已经排好了
if(book[i] == 0)//标记,等于0的时候表示没有排好
{
//开始尝试排列数字i
a[step] = i;//将第i个数字放入到底step位置上
book[i] = 1;//book[i]等于1,表示排好了
//第step位置已经排好,然后排第i+1个位置
dfs(step+1);//通过函数的递归调用实现
book[i] = 0;//将刚才尝试的数字收回,才能进行下一次尝试
}