Cod sursa(job #557523)

Utilizator cdima94Dima Marian Cosminel cdima94 Data 16 martie 2011 18:14:15
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include<iostream.h>
#include<fstream.h>
fstream f("rj.in",ios::in);
fstream g("rj.out",ios::out);

int main()
{
	char a[101][101];
	int dr[101][101]={0},dj[101][101]={0},vb, dl[8]={0, 1, 0, -1, -1, 1, -1, 1}, dc[8]={1, 0, -1, 0, -1, 1, 1 ,-1},lv,cv,k,xp,yp,xf,yf,j,i,n,m;
	f>>n>>m;
	f.get();
	for(i=1;i<=n;i++)
	{
		f.getline(a[i], 101);
	}
	
	for(int i=0; i<=n; i++)
        {       for(int j=m; j>0; j--)
                {
                        a[i][j] = a[i][j-1];
                        if(a[i][j] == 'R')
                        {xp = i; yp = j;}
                        else if(a[i][j] == 'J')
                        {xf = i; yf = j;}
                }
        }
	for(j=0;j<=m+1;j++)
	{
		a[0][j]='/';
		a[n+1][j]='/';
	}
	for(i=0;i<=n+1;i++)
	{
		a[i][0]='/';
		a[i][m+1]='/';
	}
	k=1; dr[xp][yp]=k;
	do
	{
		vb=0;
		for(i=1;i<=n;i++)
		{
			for(j=1;j<=m;j++)
			{
				if(dr[i][j]==k)
				{
					for(int x=0;x<=8;x++)
					{
						lv=i+dl[x];
						cv=j+dc[x];
						if(dr[lv][cv]==0 && a[lv][cv]!='/' && a[lv][cv]!='X')
						{
							dr[lv][cv]=k+1;
							vb=1;
						}
					}
				}
			}
		}
		if(vb)k++;
	}while(vb);
	k=1;dj[xf][yf]=k;
	do
	{
		vb=0;
		for(i=1;i<=n;i++)
		{
			for(j=1;j<=m;j++)
			{
				if(dj[i][j]==k)
				{	
					for(int x=0;x<=8;x++)
					{
						lv=i+dl[x];
						cv=j+dc[x];
						if(dj[lv][cv]==0 && a[lv][cv]!='X')
						{
							dj[lv][cv]=k+1;
							vb=1;
						}
					}
				}
			}
		}
		if(vb)k++;
	}while(vb);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			if(dr[i][j]==dj[i][j] && dr[i][j]!=0 && dj[i][j]!=0)
			{
				g<<i<<" "<<dr[i][j]<<" "<<j;
			}
		}
	}
}