Pagini recente » Cod sursa (job #957158) | Cod sursa (job #1840384) | Cod sursa (job #1499944) | Cod sursa (job #983392) | Cod sursa (job #417733)
Cod sursa(job #417733)
#include<stdio.h>
FILE *fin,*fout;
int a[1001][1001],x[1001],viz[1001],m,n,p,nr,xx,y,i,ok;
void tipar(int k){
int i;
for(i=1;i<=k;i++){
fprintf(fout,"%d ",x[i]);
}
}
int cont(int k){
if(k>1){
return 1-a[x[k]][x[k-1]];}
return 1;
}
void back(){
int k;
k=1;
x[k]=0;
while(k>0){
if(x[k]<n){
x[k]++;
if(viz[x[k]]==0){
if(cont(k)){
viz[x[k]]=1;
if(k==n){
nr++;
if(nr==p){
tipar(k);
break;}
viz[x[k]]=0;
}
else{k++; x[k]=0;}
}
}
}
else{k--; viz[x[k]]=0;}
}
}
void back1(int k){
int i;
for(i=1;i<=n;i++){
if(viz[i]==0){
x[k]=i;
if(cont(k)){
viz[i]=1;
if(k==n){
nr++;
if(nr==p){
tipar(k);
ok=1;
return;
}
}
else
back1(k+1);
viz[i]=0;
if(ok==1)
return;
}
}
}
}
int main(){
fin=fopen("dusman.in","r");
fout=fopen("dusman.out","w");
fscanf(fin,"%d %d %d",&n,&p,&m);
for(i=1;i<=m;i++){
fscanf(fin,"%d %d",&xx,&y);
a[xx][y]=a[y][xx]=1;
}
//back();
back1(1);
fclose(fin);
return 0;}