链接:https://ac.nowcoder.com/acm/problem/15128 来源:牛客网
题目描述
老李见和尚赢了自己的酒,但是自己还舍不得,所以就耍起了赖皮,对和尚说,光武不行,再来点文的,你给我说出来1-8的全排序,我就让你喝,这次绝不耍你,你能帮帮和尚么?
输入描述:
输出描述:
1~8的全排列,按照全排列的顺序输出,每行结尾无空格。
思路:对每一位置都找当前状态下,可以放置在当前位置的所有的数。当所有位置都放好数后再逐个释放使用的数。
#include<iostream>
using namespace std;
int a[9],visit[9];
void dfs(int x){
if(x == 9){ //x记录第几个位置是否被使用
for(int i = 1; i < 9; i++) cout << a[i] <<' ';
cout << endl;
}else{
for(int i = 1; i < 9; i++){
if(visit[i] == 0){ //如果x没有被使用过
visit[i] = 1; //更改使用标记
a[x] = i;
dfs(x+1); //在当前状况的情况下查找下一个位置
visit[i] = false;
}
}
}
}
int main(){
dfs(1);
return 0;
}
直接使用STL模板
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int a[9];
int count = 0;
for(int i = 0; i < 8; i++)
a[i] = i+1;
do{
for(int i = 0; i < 8; i++) cout << a[i] << ' ';
cout << endl;
}while(next_permutation(a,a+8));
}