Cod sursa(job #502168)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 17 noiembrie 2010 22:25:14
Problema Dusman Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <stdio.h>
FILE *f,*g;
int n,m,nr,p;
int a[1001][1001],viz[1001],x[1001];

void tipar(int k)
{int i;
 for(i=1;i<=k;i++)
    fprintf(g,"%d ",x[i]); 
}

int cont(int k)
{int y=1;
 if(k>1 && a[x[k-1]][x[k]]==1)
	y=0; 
 int i;
 for(i=1;i<k;i++) 
   if(x[i]==x[k]) 	
	  y=0; 
return y;
}

void back(int k){
int i,ok;
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
back(k+1);
viz[i]=0;
if(ok==1)
return;      
}
}
}
}

int main()
{int i,j;
 f=fopen("dusman.in","r");
 g=fopen("dusman.out","w");
 
 fscanf(f,"%d %d %d",&n,&p,&m);
 int x,y;
 for(i=1;i<=m;i++)
 {fscanf(f,"%d %d",&x,&y);
  a[x][y]=1;
  a[y][x]=1;
 }
 fclose(f);
 
 nr=0;
 back(1);
return 0;	
}