Cod sursa(job #265889)

Utilizator enjoyzCojocaru Valentin enjoyz Data 24 februarie 2009 18:36:00
Problema Castel Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 4.48 kb
#include<stdio.h>
int C[100],v[100],a[10][10],b[10][10];
FILE *f=fopen("castel.in","r");
FILE *g=fopen("castel.out","w");

int main()
{int i,j,M,N,K,p=1,q,ok,x,y,k,aux;

fscanf(f,"%d %d %d",&M,&N,&K);
for(i=1;i<=M;i++)
	for(j=1;j<=N;j++) fscanf(f,"%d",&a[i][j]);

for(i=1;i<=M;i++)
	for(j=1;j<=N;j++) {b[i][j]=p;
							 p++;}
p=0;
q=0;
ok=1;
for(i=1;i<=M && ok==1;i++)
	for(j=1;j<=N && ok==1;j++)
		  if(b[i][j]==K) { C[++p]=b[i][j];
									v[++q]=i;
									v[++q]=j;
									 ok=0;
							  }
b[v[1]][v[2]]=-1;
for(i=1;i<=q;i=i+2)
	 for(j=1;j<=p;j=j++)
			{x=v[i];
			 y=v[i+1];
			 if(a[x][y-1]==C[j] && b[x][y-1]!=-1)
						  {C[++p]=b[x][y-1];
							v[++q]=x;
							v[++q]=y-1;
							b[x][y-1]=-1;}
			 if(a[x][y+1]==C[j] && b[x][y+1]!=-1)
						  {C[++p]=b[x][y+1];
							v[++q]=x;
							v[++q]=y+1;
							b[x][y+1]=-1;}
			 if(a[x+1][y]==C[j] && b[x+1][y]!=-1)
						  {C[++p]=b[x+1][y];
							v[++q]=x+1;
							v[++q]=y;
							b[x+1][y]=-1;}
			 if(a[x-1][y]==C[j] && b[x-1][y]!=-1)
						  {C[++p]=b[x-1][y];
							v[++q]=x-1;
							v[++q]=y;
							b[x-1][y]=-1;}
			 if(a[x-1][y-1]==C[j] && b[x-1][y-1]!=-1)
							{ok=1;
							 for(k=1;k<=p && ok==1;k++)
								 {
									if(a[x][y-1]==C[k]) {ok=0;
															  C[++p]=b[x][y-1];
															  v[++q]=x;
															  v[++q]=y-1;
															  b[x][y-1]=-1;}
									if(a[x][y+1]==C[k]) {ok=0;
															  C[++p]=b[x][y+1];
															  v[++q]=x;
															  v[++q]=y+1;
															  b[x][y+1]=-1;}
									if(a[x+1][y]==C[k]) {ok=0;
															  C[++p]=b[x+1][y];
															  v[++q]=x+1;
															  v[++q]=y;
															  b[x+1][y]=-1;}
									if(a[x-1][y]==C[k]) {ok=0;
															  C[++p]=b[x-1][y];
															  v[++q]=x-1;
															  v[++q]=y;
															  b[x-1][y]=-1;}
									}
							 }
			 if(a[x-1][y+1]==C[j] && b[x-1][y+1]!=-1)
							{ok=1;
							 for(k=1;k<=p && ok==1;k++)
								 {
									if(a[x][y-1]==C[k]) {ok=0;
															  C[++p]=b[x][y-1];
															  v[++q]=x;
															  v[++q]=y-1;
															  b[x][y-1]=-1;}
									if(a[x][y+1]==C[k]) {ok=0;
															  C[++p]=b[x][y+1];
															  v[++q]=x;
															  v[++q]=y+1;
															  b[x][y+1]=-1;}
									if(a[x+1][y]==C[k]) {ok=0;
															  C[++p]=b[x+1][y];
															  v[++q]=x+1;
															  v[++q]=y;
															  b[x+1][y]=-1;}
									if(a[x-1][y]==C[k]) {ok=0;
															  C[++p]=b[x-1][y];
															  v[++q]=x-1;
															  v[++q]=y;
															  b[x-1][y]=-1;}
									}
							 }
			 if(a[x+1][y-1]==C[j] && b[x+1][y-1]!=-1)
							{ok=1;
							 for(k=1;k<=p && ok==1;k++)
								 {
									if(a[x][y-1]==C[k]) {ok=0;
															  C[++p]=b[x][y-1];
															  v[++q]=x;
															  v[++q]=y-1;
															  b[x][y-1]=-1;}
									if(a[x][y+1]==C[k]) {ok=0;
															  C[++p]=b[x][y+1];
															  v[++q]=x;
															  v[++q]=y+1;
															  b[x][y+1]=-1;}
									if(a[x+1][y]==C[k]) {ok=0;
															  C[++p]=b[x+1][y];
															  v[++q]=x+1;
															  v[++q]=y;
															  b[x+1][y]=-1;}
									if(a[x-1][y]==C[k]) {ok=0;
															  C[++p]=b[x-1][y];
															  v[++q]=x-1;
															  v[++q]=y;
															  b[x-1][y]=-1;}
									}
							 }
			 if(a[x+1][y+1]==C[j] && b[x+1][y+1]!=-1)
							{ok=1;
							 for(k=1;k<=p && ok==1;k++)
								 {
									if(a[x][y-1]==C[k]) {ok=0;
															  C[++p]=b[x][y-1];
															  v[++q]=x;
															  v[++q]=y-1;
															  b[x][y-1]=-1;}
									if(a[x][y+1]==C[k]) {ok=0;
															  C[++p]=b[x][y+1];
															  v[++q]=x;
															  v[++q]=y+1;
															  b[x][y+1]=-1;}
									if(a[x+1][y]==C[k]) {ok=0;
															  C[++p]=b[x+1][y];
															  v[++q]=x+1;
															  v[++q]=y;
															  b[x+1][y]=-1;}
									if(a[x-1][y]==C[k]) {ok=0;
															  C[++p]=b[x-1][y];
															  v[++q]=x-1;
															  v[++q]=y;
															  b[x-1][y]=-1;}
									}
							 }
			 }


do{ok=1;
	for(i=1;i<=p-1;i++)
		if(C[i]>C[i+1])
				 {aux=C[i];
				 C[i]=C[i+1];
				 C[i+1]=aux;
				 ok=0;}
	}
while(ok==0);
for(i=1;i<=p;i++) if(C[i]!=C[i+1]) fprintf(g,"%d ",C[i]);
fclose(f);
fclose(g);
return 0;
}