Cod sursa(job #1372097)

Utilizator madalin98Gherghe Madalin madalin98 Data 4 martie 2015 11:25:08
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.7 kb
#include<iostream>/*romeo si julieta*/
#include<fstream>
#include<queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int M[110][110];
int main()
{
    int x,y,xx,yy,n,i,j,m,rx,ry,jx,jy,dm,sem=1;
    char b[110];
    f>>n>>m;f.get();
    for (i=1;i<=n;i++)
        {
            f.get(b,110);
            f.get();
            for (j=1;j<=m;j++)
                if (b[j-1]=='X') M[i][j]=0;
                else
                    if (b[j-1]=='R') {rx=i;ry=j;M[i][j]=1;}
                    else
                        if (b[j-1]=='J') {jx=i;jy=j;M[i][j]=-1;}
                            else M[i][j]=-1;
        }
    x=rx;y=ry;
    queue<int>qx;
    queue<int>qy;
    qx.push(x);
    qy.push(y);
    while(qx.empty()!=true)
    {
        xx=qx.front();
        yy=qy.front();
        if(M[xx-1][yy]==-1||M[xx-1][yy]>M[xx][yy]+1)
        {
            M[xx-1][yy]=M[xx][yy]+1;
            qx.push(xx-1);
            qy.push(yy);
        }
        if(M[xx][yy+1]==-1||M[xx][yy+1]>M[xx][yy]+1)
        {
            M[xx][yy+1]=M[xx][yy]+1;
            qx.push(xx);
            qy.push(yy+1);
        }
        if(M[xx+1][yy]==-1||M[xx+1][yy]>M[xx][yy]+1)
        {
            M[xx+1][yy]=M[xx][yy]+1;
            qx.push(xx+1);
            qy.push(yy);
        }
         if(M[xx][yy-1]==-1||M[xx][yy-1]>M[xx][yy]+1)
        {
            M[xx][yy-1]=M[xx][yy]+1;
            qx.push(xx);
            qy.push(yy-1);
        }
         if(M[xx-1][yy-1]==-1||M[xx-1][yy]>M[xx][yy]+1)
        {
            M[xx-1][yy-1]=M[xx][yy]+1;
            qx.push(xx-1);
            qy.push(yy-1);
        }
         if(M[xx-1][yy+1]==-1||M[xx-1][yy]>M[xx][yy]+1)
        {
            M[xx-1][yy+1]=M[xx][yy]+1;
            qx.push(xx-1);
            qy.push(yy+1);
        }
         if(M[xx+1][yy+1]==-1||M[xx-1][yy]>M[xx][yy]+1)
        {
            M[xx+1][yy+1]=M[xx][yy]+1;
            qx.push(xx+1);
            qy.push(yy+1);
        }
         if(M[xx+1][yy-1]==-1||M[xx-1][yy]>M[xx][yy]+1)
        {
            M[xx+1][yy-1]=M[xx][yy]+1;
            qx.push(xx+1);
            qy.push(yy-1);
        }
        qx.pop();
        qy.pop();
    }
    dm=(M[jx][jy]+1)/2;
    g<<dm<<" ";

    x=jx;y=jy;
   while(sem==1)
    {
        if(M[x][y]==dm){g<<x<<" "<<y;sem=0;}
        if(M[x-1][y]==M[x][y]-1)x=x-1;
        if(M[x][y+1]==M[x][y]-1)y=y+1;
        if(M[x+1][y]==M[x][y]-1)x=x+1;
        if(M[x][y-1]==M[x][y]-1)y=y-1;
        if(M[x-1][y-1]==M[x][y]-1){x=x-1;y=y-1;}
        if(M[x-1][y+1]==M[x][y]-1){x=x-1;y=y+1;}
        if(M[x+1][y+1]==M[x][y]-1){x=x+1;y=y+1;}
        if(M[x+1][y-1]==M[x][y]-1){x=x+1;y=y-1;}
    }
    return 0;
}