Pagini recente » Cod sursa (job #150380) | Cod sursa (job #3200180) | Cod sursa (job #2962996) | Cod sursa (job #1989707) | Cod sursa (job #1391181)
#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;
}