Cod sursa(job #1391181)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 17 martie 2015 18:00:59
Problema Dusman Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#define MAXN 1000
int m[MAXN+1][3], v[MAXN], sol[MAXN], ok[MAXN+1], n, k;
inline void adauga(int x, int y){
    if(m[x][0]==0){
        m[x][0]=y;
    }else if(m[x][1]==0){
        m[x][1]=y;
    }else{
        m[x][2]=y;
    }
}
void bkt(int p){
    int i;
    if(k==0){
        return ;
    }
    if(p==n){
        k--;
        if(k==0){
            for(i=0; i<n; i++){
                sol[i]=v[i];
            }
        }
        return ;
    }
    for(i=1; i<=n; i++){
        if((ok[i]==0)&&((p==0)||((m[v[p-1]][0]!=i)&&(m[v[p-1]][1]!=i)&&(m[v[p-1]][2]!=i)))){
            v[p]=i;
            ok[i]=1;
            bkt(p+1);
            ok[i]=0;
        }
    }
}
int main(){
    int q, i, x, y;
    FILE *fin, *fout;
    fin=fopen("dusman.in", "r");
    fout=fopen("dusman.out", "w");
    fscanf(fin, "%d%d%d", &n, &k, &q);
    for(i=0; i<q; i++){
        fscanf(fin, "%d%d", &x, &y);
        adauga(x, y);
        adauga(y, x);
    }
    bkt(0);
    for(i=0; i<n-1; i++){
        fprintf(fout, "%d ", sol[i]);
    }
    fprintf(fout, "%d\n", sol[i]);
    fclose(fin);
    fclose(fout);
    return 0;
}