题目描述
老李见和尚赢了自己的酒,但是自己还舍不得,所以就耍起了赖皮,对和尚说,光武不行,再来点文的,你给我说出来1-8的全排序,我就让你喝,这次绝不耍你,你能帮帮和尚么?
输入描述:
无
输出描述:
1~8的全排列,按照全排列的顺序输出,每行结尾无空格。
代码:
#include<bits/stdc++.h>
using namespace std;
bool used[9];//求八位数,从1到8,0不用
string ans;
void dfs(int digit)//层数从0到7,到8的时候就要输出了
{
if (digit == 8)
{
cout << ans << endl;
return;
}
for (int j = 1; j <= 8; j++)
{
if (!used[j])
{
used[j] = 1;
ans.insert(ans.end(), j + '0');
dfs(digit + 1);//DFS
used[j] = 0;
ans.erase(ans.end() - 1);
}
}
}
int main()
{
dfs(0);
return 0;
}
备注:
这种用递推来排列数的思想还可以用于其他的类似水仙花数的题。