Cod sursa(job #553240)

Utilizator alexamiu2008Miu Alexandra alexamiu2008 Data 13 martie 2011 19:50:33
Problema Dusman Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<stdio.h>
FILE*fin,*fout;
int n,i,j,k1,sol[1001],m,viz[1001],a[1001][1001],x,y;
int verifica() {
int i;
for(i=1;i<=n;i++){
if(i!=1&&i!=n){
    if(a[sol[i]][sol[i-1]]==1||a[sol[i]][sol[i+1]]==1){return 0;}
}
  if(i==1&&a[sol[i]][sol[i+1]]==1){return 0;}
  if(i==n&&a[sol[i]][sol[i-1]]==1){return 0;}
}

 return 1;
}




void tipar(){
   int i;
   for(i=1;i<=n;i++){fprintf(fout,"%d ",sol[i]);}

   }
void back(int k){
   int i;
   for(i=1;i<=n;i++){
      if(viz[i]==0){
      viz[i]=1;
      sol[k]=i;
	if(k==n){
	if(verifica()==1) {j++;}
	if(j==k1){tipar();break;}

	}
	else{back(k+1);}
	viz[i]=0;
      }
   }

}

int main(){
 fin=fopen("dusman.in","r");
 fout=fopen("dusman.out","w");
 fscanf(fin,"%d %d %d",&n,&k1,&m);
  for(i=1;i<=m;i++){
  fscanf(fin,"%d %d",&x,&y);
  a[x][y]=1;a[y][x]=1;        }
 back(1);



return 0;
}