Cod sursa(job #1690683)

Utilizator GeorginskyGeorge Georginsky Data 15 aprilie 2016 15:11:31
Problema Dusman Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <iostream>
#include <fstream>
#define NMAX 1001
using namespace std;
ifstream in("dusman.in");
ofstream out("dusman.out");
int n, m, k, v[NMAX], a[NMAX][NMAX], nr;

void read(){
    in>>n>>k>>m;
    int x, y;
    for(int i=1; i<=m; i++){
        in>>x>>y;
        a[x][y]=1;
    }
}

bool sol(int x){
    if(x==n)return true;
    return false;
}

bool valid(int x){
    for(int i=1; i<x; i++){
        if(v[i]==v[x]){
            return false;
        }else if(a[v[i]][v[i-1]]==1||a[v[i]][v[i+1]]==1||a[v[i-1]][v[i]]==1||a[v[i+1]][v[i]]==1){
            return false;
        }
    }
    return true;
}

void print(){
    for(int i=1; i<=n; i++)out<<v[i]<<" ";
}
int backtrack(int x){
    for(int i=1; i<=n; i++){
        v[x]=i;
        if(valid(x)){
            if(sol(x)){
                nr++;
                if(nr==k){
                    print();
                    return -1;
                }
            }else{
                backtrack(x+1);
            }
        }
    }
}

int main(){
    v[0]=0;
    nr=0;
    read();
    backtrack(1);
    return 0;
}