Cod sursa(job #212495)

Utilizator dumyDumitrica Alin dumy Data 5 octombrie 2008 18:32:14
Problema Dusman Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<iostream.h>
#include<fstream.h>
int v[1000][3],x[1000],n,k,r,nr,m,i,z,y;
void tipar()
		 { ofstream f("dusman.out");
			for(i=1;i<=n;i++)
					f<<x[i]<<" ";
			cout<<endl;
		 }
int valid(int k)
			  { int i;
				 for(i=1;i<k;i++)
						 if(x[i]==x[k]) return 0;
             if(k>1)
				 for(i=0;i<3;i++)
						 if(v[x[k]][i]==x[k-1]) return 0;

				 return 1;


			  }
int sol(int k)
			  { if(k==n) return 1;
				 return 0;
			  }
void back()
			  {k=1; x[k]=0;
				while(k>0) if(x[k]<n)
									 {x[k]++;
									  if(valid(k))
												  if(sol(k)) {nr++; if(nr==r) {tipar();break;} }
														else {k++;
																x[k]=0;
																}
									  }
							  else k--;
				}
int main()
		{ifstream h("dusman.in");
		 h>>n>>r>>m;
		 for(i=1;i<=m;i++) {h>>z>>y;
								  if(v[z][0]==0) v[z][0]=y;
											else if(v[z][1]==0) v[z][1]=y;
												  else v[z][2]=y;
								  if(v[y][0]==0) v[y][0]=z;
											else if(v[y][1]==0) v[y][1]=z;
													else v[y][2]=z;
								  }
		 back();
		 return 0;

		}