生成全排列 逆字典序输出

题目链接:

http://39.106.164.46/problem.php?id=1038

思路:

dfs,每当cnt==n时输出当前序列。

代码如下:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX 10
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;

int num[10],vis[10];
int n,cnt;

void dfs(){
    if(cnt==n){
        for(int i=0;i<n-1;i++) printf("%d ",num[i]);
        printf("%d\n",num[n-1]);
    }
    for(int i=n-1;i>=0;i--){
        if(!vis[i]){
            vis[i]=1;
            num[cnt++]=i+1;
            dfs();
            vis[i]=0;
            cnt--;
        }
    }
}

int main(){
    int i;
    while(scanf("%d",&n)!=EOF){
        memset(vis,0,sizeof(vis));
        cnt=0;
        dfs();
    }
}

你可能感兴趣的:(DFS)