CodeVS 2928 你缺什么 题解

#include 
#include 
#include 
using namespace std;

int N;
int X[10000+2];
bool flag[10000+2];
int ans[10000+2];

void DFS(int n){
    if(n>N){
        printf("%d", ans[1]);
        for(int i = 2; i<=N; ++i) printf(" %d", ans[i]);
        printf("\n");
        exit(0);
    }
    for(int i = 1; i<=N; ++i){
        if(!flag[i] && X[ans[n-1]] != X[i]){
            ans[n] = i;
            flag[i] = true;
            DFS(n+1);
            flag[i] = false;
        }
    }
}

int main(){
    scanf("%d", &N);
    for(int i = 1; i<=N; ++i) scanf("%d", X+i);
    DFS(1);
    return 0;
}

你可能感兴趣的:(深度优先搜索)