链接:https://ac.nowcoder.com/acm/problem/15128 来源:牛客网

题目描述

老李见和尚赢了自己的酒,但是自己还舍不得,所以就耍起了赖皮,对和尚说,光武不行,再来点文的,你给我说出来1-8的全排序,我就让你喝,这次绝不耍你,你能帮帮和尚么?

输入描述:

输出描述:

1~8的全排列,按照全排列的顺序输出,每行结尾无空格。

思路:对每一位置都找当前状态下,可以放置在当前位置的所有的数。当所有位置都放好数后再逐个释放使用的数。

alt

#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));
   
}