Cod sursa(job #1308297)

Utilizator moise_alexandruMoise Alexandru moise_alexandru Data 3 ianuarie 2015 21:58:54
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <iostream>
#include <fstream>
const int MAXN=100;
using namespace std;
char mat[MAXN][MAXN];
ifstream fin("rj.in");
ofstream fout("rj.out");


int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};

int main()
{
    int N, M;
    fin >> N >> M;
    for (int i = 0; i < N; ++i) {
        fin.getline(mat[i],0);
        fin.getline(mat[i],M);
    }

    int x1, y1, x2, y2;
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<M;j++)
        {
            if(mat[i][j]=='R')
            {
                x1=i;
                y1=j;
                break;
            }
        }
    }
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<M;j++)
        {
            if(mat[i][j]=='J')
            {
                x2=i;
                y2=j;
                break;
            }
        }
    }
    for(int i=0;i<=N;i++)
    {
        for(int j=0;j<M;j++)
        if(mat[i][j]==' ')
            mat[i][j]='0';
    }
    short cx[MAXN*MAXN];
    short cy[MAXN*MAXN];
    int px=0, ux=0;
    int py=0, uy=0;
    mat[x1][y1]=1;
    cx[px]=x1;
    cy[py]=y1;
    while(mat[x2][y2]==0 && ux>=px)
    {
        int x=cx[px];
        int y=cy[py];
        px++;
        py++;

        for(int k = 0; k < 4; ++k) {
            int vx = x + dx[k];
            int vy = y + dy[k];
            if(vx<1 || vy<1 || vx>N || vy>N)
                continue;
            if(mat[vx][vy]!='0')
                continue;
            ux++;
            uy++;
            cx[ux]=vx;
            cy[uy]=vy;
            mat[vx][vy]=mat[x][y]+1;
        }
    }
    fout<<mat[x2][y2]/2;
    return 0;
}