Cod sursa(job #22972)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 27 februarie 2007 21:20:45
Problema Party Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<stdio.h>
int a[3][101][101],i,n,m,x[102],ys[102],gata,t,y,z,lung;
int back(int p,int l)
{
	int j,ok,r;
	if(p==n+1)
	{lung=l;r=0;for(j=1;j<=n;j++)if(x[j]) {r++;ys[r]=j;}
		gata=1;
		return 0;}
	x[p]=1;ok=1;
	for(j=1;j<p;j++)
	  if((a[x[j]+2*x[p]][j][p])&&(a[x[p]+2*x[j]][p][j])){ok=0;break;}
	if(ok) {back(p+1,l+1); if(gata) return 0;}
	x[p]=0;ok=1;
	for(j=1;j<p;j++)
	  if((a[x[j]+2*x[p]][j][p])&&(a[x[p]+2*x[j]][p][j])){ok=0;break;}
	if(ok){back(p+1,l); if(gata)return 0;}
	return 0;
}

int main()
{
	FILE *f=fopen("party.in","r");
	fscanf(f,"%d%d",&n,&m);
	for(i=1;i<=m;i++)
	{ fscanf(f,"%d%d%d",&t,&y,&z);
	  if(z==0){a[0][t][y]=1;}
	  if(z==1){a[1][t][y]=1;}
	  if(z==2){a[2][t][y]=1;}
	  if(z==3){a[3][t][y]=1;}
	}
	fclose(f);
	gata=0;
	back(1,0);
	f=fopen("party.out","w");
	fprintf(f,"%d\n",lung);
	for(i=1;i<=lung;i++)
	fprintf(f,"%d\n",ys[i]);
	fclose(f);
	return 0;
}