Cod sursa(job #672000)

Utilizator andreea29Iorga Andreea andreea29 Data 1 februarie 2012 12:58:14
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include<fstream>
#include<iostream>
#define maxn 110
#define maxx 10010
#define maxl 8
using namespace std;

int n, m, l, px, py, i, ir, ij, jj, jr, j, c[maxn][maxn], d[maxn][maxn], sx[maxx], sy[maxx], dirx[maxl]={0,1,1,1,0,-1,-1,-1}, diry[maxl]={-1,-1,0,1,1,1,0,-1};
char a[maxn][maxn], s[maxn], b[5];


void lee(int x,int y,int c[][maxn])
{
	int cx, cy;
     
    for (i=1; i<=n; ++i)
		for (j=1; j<=m; ++j) 
			if (a[i][j]=='X')
				c[i][j]=-1;
		else c[i][j]=maxx;
         
	l=1;
	sx[l]=x;
	sy[l]=y;
	c[x][y]=1;
	for (i=1; i<=l; ++i)
		for (j=1; j<=maxl; ++j)
		{
			cx=sx[i]+dirx[j];
			cy=sy[i]+diry[j];
			if ((cx>0) && (cx<=n) && (cy>=0) && (cy<=m) && (c[sx[i]][sy[i]]+1<c[cx][cy]))
			{
				l++;
				sx[l]=cx;
				sy[l]=cy;
				c[cx][cy]=c[sx[i]][sy[i]]+1;
			}
		}
}

int main()
{
	ifstream f("rj.in");
	ofstream h("rj.out");
	f>>n>>m;
	f.getline(b, 5);
	for (i=1; i<=n; ++i)
	{
		f.getline(s, 105);
		for (j=0; j<m; ++j)
		{
			a[i][j+1]=s[j];
			if (a[i][j+1]=='R')
			{
				ir=i;
				jr=j+1;
			}
			else
				if (a[i][j+1]=='J')
				{
					ij=i;
					jj=j+1;
				}
		}
	}
	f.close();
	lee (ij, jj, d);
	lee (ir, jr, c);	
	px=0;
	py=0;
    c[px][py]=maxx;
    for (i=1;i<=n;++i)
		for (j=1;j<=m;++j)
			if ((c[i][j]!=-1) && (c[i][j]==d[i][j]) && (c[i][j]<c[px][py])) 
			{
				px=i;
				py=j;
			}
	h<<c[px][py]<<" "<<px<<" "<<py<<'\n';
	
	h.close();
	return 0;
}