Cod sursa(job #417733)

Utilizator CS-meStanca Marian Ciprian CS-me Data 14 martie 2010 19:37:29
Problema Dusman Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#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;}