DFS——求1—N所有數字的全排列

代碼:

//
//  main.cpp
//  DFS——全排列
//
//  Created by showlo on 2018/4/14.
//  Copyright © 2018年 showlo. All rights reserved.
//輸出從1到N的全排列

#include <stdio.h>
#include <algorithm>
#include <math.h>
using namespace std;

int N,k,num;
int a[1000];

int dfs(int k){
    int i,j,flag;
    if (k==N+1) {
        num++;
        printf("Case %d:\n",num);
        for (i=1; i<=N; i++) {
            printf("%d ",a[i]);
        }
        printf("\n");
        return 0;
    }
    else{
        for (j=1; j<=N; j++) {
            flag=1;
            a[k]=j;
            for (i=1; i<k; i++) {
                if (a[i]==a[k]) {
                    flag=0;
                    break;
                }
            }
            if (flag) {
                dfs(k+1);
                a[k]=0;
            }
        }
    }
    return num;
}
int main() {
    while(scanf("%d",&N)){
        memset(a, 0, sizeof(a));
        num=0;
        dfs(1);
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章