Cod sursa(job #467620)

Utilizator nickyyLal Daniel Emanuel nickyy Data 29 iunie 2010 17:54:48
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <stdio.h>
#define nmax 101
#define cmax 100000
#define inf 100001
using namespace std;
int dx[]={-1,-1,0,1,1,1,0,-1},dy[]={0,1,1,1,0,-1,-1,-1};
struct elem
	{int l,c,d;		}cr[cmax],cj[nmax];
int a[nmax][nmax],n,m;
	
	void read(void)
	{FILE *fin=fopen("rj.in","r");
	 int i,j;
	 char k;
	 
	 fscanf(fin,"%d%d",&n,&m);
	 for(i=1;i<=n;i++)
		 {fscanf(fin,"%c",&k);
		  for(j=1;j<=m;j++)
			{fscanf(fin,"%c",&k);
			 if(k=='X') a[i][j]=inf;
			 else if(k=='R'||k=='J') 
					if(k=='R')cr[0].l=i, cr[0].c=j, cr[0].d=1, a[i][j]=1;
						else cj[0].l=i, cj[0].c=j, cj[0].d=-1, a[i][j]=-1;
			}
		 }
	 fclose(fin);
	}
	
	void bord(void)
	{int i;
	 for(i=1;i<=n;i++) a[i][0]=a[i][m+1]=inf;
	 for(i=1;i<=m;i++) a[0][i]=a[m+1][i]=inf;
	}
	
	void solve_write(void)
	{int ic1=0,sf1=0,ic2=0,sf2=0,k,ok=0;
	 FILE *fout=fopen("rj.out","w");
	 elem x,y;
	 
	 x=cr[0]; a[x.l][x.c]=1;
	 x=cj[0]; a[x.l][x.c]=-1;
	 while(!ok)
		{x=cr[ic1++]; 
		for(k=0;k<8;k++)
			{y.l=x.l+dx[k]; y.c=x.c+dy[k]; y.d=x.d+1;
			 if(a[y.l][y.c]==0) cr[++sf1]=y, a[y.l][y.c]=y.d;
			}
		 x=cj[ic2++];
		for(k=0;k<8;k++)
			{y.l=x.l+dx[k]; y.c=x.c+dy[k]; y.d=x.d-1;
			 if(a[y.l][y.c]==-y.d)
				 {ok=1; break;	}
			 if(a[y.l][y.c]==0) cj[++sf2]=y, a[y.l][y.c]=y.d;
			}
		}
	 fprintf(fout,"%d %d %d",-y.d,y.l,y.c);
	 fclose(fout);
	}
	
int main(void)
{read();
 bord();
 solve_write();
 return 0;
}