Cod sursa(job #146306)

Utilizator sory1806Sandu Sorina-Gabriela sory1806 Data 1 martie 2008 15:34:27
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include<fstream.h>
#include<string.h>
int a[102][102], b[102][102], n, m, ri, rj, ji, jj;
ifstream f("rj.in");
ofstream g("rj.out");

void read()
{       int i, j;
	char c;
	f>>n>>m; f.get();
	for(i=1; i<=n; i++)
	{       for(j=1; j<=m; j++)
		{	f.get(c);
			if(c=='X')
			{	a[i][j]=-1;
				b[i][j]=-1;
			}
			if(c=='R')
			{       ri=i; rj=j;
				a[i][j]=1;
			}
			if(c=='J')
			{	ji=i; jj=j;
				b[i][j]=1;
			}
		}
		f.get();
	}
	for(i=0; i<=n+1; i++)
	{	a[i][0]=-1;
		a[i][m+1]=-1;
		b[i][0]=-1;
		b[i][m+1]=-1;
	}
	for(i=0; i<=m+1; i++)
	{	a[0][i]=-1;
		a[n+1][i]=-1;
		b[0][i]=-1;
		b[n+1][i]=-1;
	}
	f.close();
}

void coada(int x, int y, int a[102][102])
{	int dii[8]={-1, -1, -1, 0, 0, 1, 1, 1},
	    djj[8]={-1, 0, 1, -1, 1, -1, 0, 1};
	struct
	{       char x, y;
	}	c[20000];
	int p=0, u=0, i, di, dj;
	c[p].x=x; c[p].y=y;
	while(p<=u)
	{	x=c[p].x; y=c[p].y;
		for(i=0; i<8; i++)
		{	di=dii[i]; dj=djj[i];
			if(a[x+di][y+dj]>=0)
				if(a[x+di][y+dj]+1<a[x][y] || a[x+di][y+dj]==0)
				{	a[x+di][y+dj]=a[x][y]+1;
					u++;
					c[u].x=x+di;
					c[u].y=y+dj;
				}
		}
		p++;
	}
}

void write()
{	int i, j, min, x, y;
	min=30000;
	for(i=1; i<=n; i++)
	{	for(j=1; j<=m; j++)
		{       if(a[i][j]==b[i][j] && a[i][j]>0 && a[i][j]<min)
			{	min=a[i][j]; x=i; y=j;
			}
		}
	}
	g<<a[x][y]<<' '<<x<<' '<<y<<'\n';
	g.close();
}

void solve()
{	coada(ri, rj, a);
	coada(ji, jj, b);
}

int main()
{       read();
	solve();
	write();
	return 0;
}