求1-n的全排列
#include <stdio.h>
#include "iostream"
using namespace std;
struct Node
{
int num;
bool outHand;
Node(int x=0):num(x),outHand(false){}
};
int n;
Node list[10];
void DFS(int step)
{
if (step == n+1) //判断边界,此时所有数都放到了容器中
{
for (int i = 1;i <= n;i++)
cout << list[i].num; //输出容器中的状态
cout << endl;return; //返回到堆栈中上一个递归状态
}
for (int i = 1;i <= n;i++)//尝试每一种可能
{
if (list[i].outHand == false)//前提是这个n还没有放进去
{
list[step].num = i; //把1到n放到容器list中
list[i].outHand = true; //改变状态
DFS(step + 1); //继续递归下一步
list[i].outHand= false;//下一步完事后,肯定是要换一个数的,所以我们把该位置状态设为false
}
}
return;//所有可能都完事的时候,返回。
}
void main()
{
cin >> n;
DFS(1);
system("pause");
}