记录自己的步伐,因为到现在感觉自己前面的知识不牢固,因此从头开始过一遍。
简述:输入一个数字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;//可要可不要
}
}
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;
{
scanf_s("%d", &n);
dfs(1);
getchar(); getchar();
return 0;
}