每日方法——深搜01

记录自己的步伐,因为到现在感觉自己前面的知识不牢固,因此从头开始过一遍。

简述:输入一个数字N,对从1到N进行组合(全排列),打印结果。

例如输入3;最后的结果为:

123

132

213

231

312

321

代码如下:

#include <stdio.h>

int a[100], book[100]; int n;
void dfs(int step)
{
 int i;
 if (step == n + 1)//判断是否一轮放完,如果完了就打印出来
 {
  for (i = 1; i <= n; i++) {
   printf("%d", a[i]);//打印
  }
  printf("\n");//为了更美观一点采用换行
 return;//返回之前的一步,最近一次调用dfs的地方
 }
 for (i = 1; i <= n; i++) {
  if (book[i] == 0) {//判断牌是否在手上
   a[step] = i;//将牌放入盒子
   book[i] = 1;//标记此牌已经用过
   dfs(step + 1);//前往下一个盒子
   book[i] = 0;//一定要将先收回刚刚放入的牌,才能进行下一次的尝试
  }
 }
 return;//可要可不要
}
int main()
{
 scanf_s("%d", &n);
 dfs(1);
 getchar(); getchar();
 return 0;
}

猜你喜欢

转载自www.cnblogs.com/lwyy1223-/p/12498407.html