Cod sursa(job #714876)

Utilizator misinoonisim necula misino Data 16 martie 2012 12:08:27
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.86 kb
#include<cstdio>
using namespace std;
FILE *f,*g;
int m,n,i,j,k,ok,a[102][102],b[102][102];
char c;
int main()
{f=fopen("rj.in","r");
g=fopen("rj.out","w");
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;++i)
{fscanf(f,"%c",&c);
for(j=1;j<=m;++j)
{fscanf(f,"%c",&c);
if(c=='R')
	a[i][j]=1;
else
	if(c=='X')
		a[i][j]=-1,b[i][j]=-1;
	else
		if(c=='J')
			b[i][j]=1;
}}
ok=1;
k=1;
for(i=0;i<=n+1;++i)
{a[i][0]=b[i][0]=-1;
a[i][m+1]=b[i][m+1]=-1;
}
for(i=0;i<=m+1;++i)
{a[0][i]=b[0][i]=-1;
a[n+1][i]=b[n+1][i]=-1;
}
while(ok)
{ok=0;
for(i=1;i<=n;++i)
	for(j=1;j<=m;++j)
		if(a[i][j]==k)
		{if(a[i][j+1]==0||a[i][j+1]>k+1)
			a[i][j+1]=k+1,ok=1;
		if(a[i][j-1]==0||a[i][j-1]>k+1)
			a[i][j-1]=k+1,ok=1;
		if(a[i+1][j]==0||a[i+1][j]>k+1)
			a[i+1][j]=k+1,ok=1;
		if(a[i-1][j]==0||a[i-1][j]>k+1)
			a[i-1][j]=k+1,ok=1;
		if(a[i+1][j+1]==0||a[i+1][j+1]>k+1)
			a[i+1][j+1]=k+1,ok=1;
		if(a[i+1][j-1]==0||a[i+1][j-1]>k+1)
			a[i+1][j-1]=k+1,ok=1;
		if(a[i-1][j-1]==0||a[i-1][j-1]>k+1)
			a[i-1][j-1]=k+1,ok=1;
		if(a[i-1][j+1]==0||a[i-1][j+1]>k+1)
			a[i-1][j+1]=k+1,ok=1;
		}
++k;
}
ok=1;
k=1;
while(ok)
{ok=0;
for(i=1;i<=n;++i)
	for(j=1;j<=m;++j)
		if(b[i][j]==k)
		{if(b[i][j+1]==0||b[i][j+1]>k+1)
			b[i][j+1]=k+1,ok=1;
		if(b[i][j-1]==0||b[i][j-1]>k+1)
			b[i][j-1]=k+1,ok=1;
		if(b[i+1][j]==0||b[i+1][j]>k+1)
			b[i+1][j]=k+1,ok=1;
		if(b[i-1][j]==0||b[i-1][j]>k+1)
			b[i-1][j]=k+1,ok=1;
		if(b[i+1][j+1]==0||b[i+1][j+1]>k+1)
			b[i+1][j+1]=k+1,ok=1;
		if(b[i+1][j-1]==0||b[i+1][j-1]>k+1)
			b[i+1][j-1]=k+1,ok=1;
		if(b[i-1][j-1]==0||b[i-1][j-1]>k+1)
			b[i-1][j-1]=k+1,ok=1;
		if(b[i-1][j+1]==0||b[i-1][j+1]>k+1)
			b[i-1][j+1]=k+1,ok=1;
		}
++k;
}
for(i=1;i<=n;++i)
{for(j=1;j<=m;++j)
	if(a[i][j]==b[i][j]&&a[i][j]>0)
	{fprintf(g,"%d %d %d\n",a[i][j],i,j);
	break;
	}
if(j<=m)
	break;
}
fclose(f);
fclose(g);
return 0;
}