P1706 全排列问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
思路:dfs+回溯
代码:
#include<iostream>
using namespace std;
int n, arr[10], dir[10] = {0};
void printAll(int m)
{
if (m > n) {
for (int j = 1; j <= n; j++)
{
printf("%5d", arr[j]);
}
cout << endl;
return;
}
for (int i = 1; i <= n; i++)
{
if (!dir[i])//未用过
{
dir[i] = 1;//标记
arr[m] = i;
printAll(m + 1);
dir[i] = 0;//回溯
}
}
}
int main()
{
cin >> n;
printAll(1);
return 0;
}
总结:全排列记录用过的,需要回溯为0