题目链接AcWing 842. 排列数字 - AcWing
样例
解决思路:利用深度优先遍历(dfs)解决
代码实现
#include <iostream>
using namespace std;
const int N = 10;
int path[N];//存放序列
bool state[N];//数字是否被用过
int n;
void dfs(int u)
{
if(u > n)//空位填满可以输出
{
for(int i = 1; i <= n; i ++ )
cout << path[i] <<' ';
cout << endl;
}
for(int i = 1; i <= n; i ++)//空位可以填1到n的数
{
if(!state[i])//如果这个数字没有被用过
{
path[u] = i;//放进去
state[i] = true;//改为被用过
dfs(u + 1);//下一个空
state[i] = false;//恢复现场,回溯
}
}
}
int main()
{
cin >> n;
dfs(1);//从1开始dfs
}