Cod sursa(job #162869)

Utilizator andumMorie Daniel Alexandru andum Data 20 martie 2008 20:32:14
Problema Dusman Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
# include <stdio.h>
# include <stdlib.h>

int n,st[1000],p,k,a[1000][1000],i,j,m,x,y,F[100],kk,q;
FILE *f,*g;

void back(int k)
{

  int i,x;

  if (k==n+1) { // tiparesc solutia
		q=q+1;
		if (q==kk) {
		g=fopen("dusman.out","w");
		for (i=1;i<k;i++)
			fprintf(g,"%d ",st[i]);
		fprintf(g,"\n");
		fclose(g);
		exit;
		}
	       }
      else {
	    for (x=1;x<=n;x++)
		{
		 st[k]=x;
		 // verific daca valoarea este valida
		 int ev=1;
		 if (F[st[k]]==1) ev=0;
		  else  // verific daca sunt dusmani
			if (k>1 && a[st[k]][st[k-1]]==1) ev=0;
		 if (ev) {
			     F[st[k]]=1;
			     back(k+1);
			     F[st[k]]=0;
			  }
		}
      }
}

int main()
{
 f=fopen("dusman.in","r");

 fscanf(f,"%d %d %d",&n,&kk,&m);
 for (i=1;i<=m;i++)
   {
    fscanf(f,"%d %d",&x, &y);
    a[x][y]=1;
    a[y][x]=1;
   }
 fclose(f);
 q=0;
 back(1);
 return 0;
}