Cod sursa(job #592894)

Utilizator noruIlies Norbert noru Data 31 mai 2011 08:33:31
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.53 kb
#include<stdio.h>
int cx[10001],cy[10001];
int v[101][101];
int main()
{
	int n,m,i,j,min=9999,k=0,a,b,x,y,st,fi,d,ok=0,drum;
	char c;
	FILE *f=fopen("rj.in","r");
	FILE *g=fopen("rj.out","w");
	fscanf(f,"%d %d%c",&n,&m,&c);
	for (i=1;i<=n;i++)
		for (j=1;j<=m;j++)
		{
			fscanf(f,"%c",&c);
			if (c=='X') v[i][j]=1;
			if (c==' ') v[i][j]=0;
			if (c=='R') {a=i;b=j;}
			if (c=='J') {x=i;y=j;}
			if (c=='\n') j--;
		}
	st=fi=1;
	v[a][b]=1;
	cx[1]=a;
	cy[1]=b;
	k=1;
	do
	{
		ok=1;
		d=0;
		for (i=st;i<=fi;i++)
		{
			if (cx[i]<n)if (v[cx[i]+1][cy[i]]==0) {v[cx[i]+1][cy[i]]=v[cx[i]][cy[i]]+1;ok=0;d++;k++;cx[k]=cx[i]+1;cy[k]=cy[i];}
			if (cx[k]==x&&cy[k]==y) break;
			if (cy[i]<m)if (v[cx[i]][cy[i]+1]==0) {v[cx[i]][cy[i]+1]=v[cx[i]][cy[i]]+1;ok=0;d++;k++;cx[k]=cx[i];cy[k]=cy[i]+1;}
			if (cx[k]==x&&cy[k]==y) break;
			if (cx[i]>1)if (v[cx[i]-1][cy[i]]==0) {v[cx[i]-1][cy[i]]=v[cx[i]][cy[i]]+1;ok=0;d++;k++;cx[k]=cx[i]-1;cy[k]=cy[i];}
			if (cx[k]==x&&cy[k]==y) break;
			if (cy[i]>1)if (v[cx[i]][cy[i]-1]==0) {v[cx[i]][cy[i]-1]=v[cx[i]][cy[i]]+1;ok=0;d++;k++;cx[k]=cx[i];cy[k]=cy[i]-1;}
			if (cx[k]==x&&cy[k]==y) break;
			if (cx[i]>1&&cy[i]>1)if (v[cx[i]-1][cy[i]-1]==0) {v[cx[i]-1][cy[i]-1]=v[cx[i]][cy[i]]+1;ok=0;d++;k++;cx[k]=cx[i]-1;cy[k]=cy[i]-1;}
			if (cx[k]==x&&cy[k]==y) break;
			if (cy[i]<m&&cx[i]>1)if (v[cx[i]+1][cy[i]-1]==0) {v[cx[i]+1][cy[i]-1]=v[cx[i]][cy[i]]+1;ok=0;d++;k++;cx[k]=cx[i]+1;cy[k]=cy[i]-1;}
			if (cx[k]==x&&cy[k]==y) break;
			if (cx[i]>1&&cy[i]<m)if (v[cx[i]-1][cy[i]+1]==0) {v[cx[i]-1][cy[i]+1]=v[cx[i]][cy[i]]+1;ok=0;d++;k++;cx[k]=cx[i]-1;cy[k]=cy[i]+1;}
			if (cx[k]==x&&cy[k]==y) break;
			if (cy[i]<m&&cx[i]<n)if (v[cx[i]+1][cy[i]+1]==0) {v[cx[i]+1][cy[i]+1]=v[cx[i]][cy[i]]+1;ok=0;d++;k++;cx[k]=cx[i]+1;cy[k]=cy[i]+1;}
			if (cx[k]==x&&cy[k]==y) break;
		}
		st=fi+1;
		fi+=d;
	}
	while (ok==0);
	drum=v[x][y]+1;
	fprintf(g,"%d ",drum/2);
	k=1;
	while (k-1!=(v[x][y]-1)/2)
	{
		if (v[a+1][b-1]==k+1) {b--;a++;k++;}
		if (k-1==(v[x][y]-1)/2) break;
		if (v[a-1][b-1]==k+1) {b--;a--;k++;}
		if (k-1==(v[x][y]-1)/2) break;
		if (v[a+1][b+1]==k+1) {b++;a++;k++;}
		if (k-1==(v[x][y]-1)/2) break;
		if (v[a-1][b+1]==k+1) {b++;a--;k++;}
		if (k-1==(v[x][y]-1)/2) break;
		if (v[a+1][b]==k+1) {a++;k++;}
		if (k-1==(v[x][y]-1)/2) break;
		if (v[a][b+1]==k+1) {b++;k++;}
		if (k-1==(v[x][y]-1)/2) break;
		if (v[a-1][b]==k+1) {a--;k++;}
		if (k-1==(v[x][y]-1)/2) break;
		if (v[a][b-1]==k+1) {b--;k++;}
		if (k-1==(v[x][y]-1)/2) break;
	}
	fprintf(g,"%d %d",a,b);
	return 0;
}