Cod sursa(job #1372145)

Utilizator ioncorinamariaIon Corina ioncorinamaria Data 4 martie 2015 11:46:39
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
#include<iostream>
#include<fstream>
#include<string.h>
#include<queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int i,n,m,j,y,x,xx,yy,xf,yf,a[105][105],b[105][105];
queue<int> Qx;
queue<int> Qy;
void lee(int a[105][105],int x,int y)
{
    Qx.push(x);Qy.push(y);
    while(Qx.empty()!=1)
		{xx=Qx.front();yy=Qy.front();
		  if(a[xx-1][yy]==0||a[xx-1][yy]>a[xx][yy]+1){a[xx-1][yy]=a[xx][yy]+1;
														Qx.push(xx-1);
														Qy.push(yy);}
		  if(a[xx+1][yy]==0||a[xx+1][yy]>a[xx][yy]+1){a[xx+1][yy]=a[xx][yy]+1;
														Qx.push(xx+1);
														Qy.push(yy);}
		  if(a[xx][yy-1]==0||a[xx][yy-1]>a[xx][yy]+1){a[xx][yy-1]=a[xx][yy]+1;
														Qx.push(xx);
														Qy.push(yy-1);}
		  if(a[xx][yy+1]==0||a[xx][yy+1]>a[xx][yy]+1){a[xx][yy+1]=a[xx][yy]+1;
														Qx.push(xx);
														Qy.push(yy+1);}
		Qx.pop();Qy.pop();
		}
}
int main()
{

	char *c;
	c=new char[105];
	f>>n>>m;
	for(i=1;i<=n;i++)
        {f.get();
        f.get(c,105);
         for(j=0;j<m;j++)
            if(c[j]=='X'){a[i][j+1]=-1;b[i][j+1]=-1;}
                    else if(c[j]=='R'){x=i;y=j+1;}
                                else if(c[j]=='J'){xf=i;yf=j+1;}
        delete(c);
        }
	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;}
	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;}
    lee(a,x,y);
    a[x][y]=0;
    lee(b,xf,yf);
    b[xf][yf]=0;
	for(i=1;i<=n;i++)for(j=1;j<=m;j++)
        if(b[i][j]>0&&b[i][j]==a[i][j]){g<<b[i][j]<<' '<<i<<' '<<j<<'\n';break;break;}
    f.close();
    g.close();
    return 0;}