Cod sursa(job #1587926)

Utilizator CarabasRobertCarabas Robert-Iancu CarabasRobert Data 2 februarie 2016 17:49:15
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.91 kb
#include <fstream>
#include <queue>
using namespace std;

int n,m, xr, yr, xj, yj, i, j;
char a[105][105];
int J[105][105], R[105][105];
short dx[]={0,  0,-1, 1};
short dy[]={1, -1, 0, 0};

void Citire()
{
    ifstream fin ("rj.in");
    fin>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            {fin>>a[i][j];
            if(a[i][j]=='R') {xr=i; yr=j;}
            else if(a[i][j]=='J') {xj=i; yj=j;}
            }
    fin.close();
}

struct coada
{
    short x, y;
};

queue<coada> q;

void Bordare()
{
    for(i=1;i<=n;i++)
        a[i][0]=a[i][m+1]='X';
    for(i=1;i<=m;i++)
        a[0][i]=a[n+1][i]='X';
    for (i = 1; i <= n; ++i)
        for (j = 1; j <= n; ++j)
            {J[i][j] = 30001;
            R[i][j]=30001;
            }
}

void Lee(int xs,int ys, int d[105][105])
{
    coada w,v;
    w.x=xs;
    w.y=ys;
    q.push(w);
    d[xs][ys]=1;
    while(!q.empty())
    {
        w=q.front();
        q.pop();
        for(int k=0;k<4;k++)
        {
            v.x=w.x+dx[k];
            v.y=w.y+dy[k];
            if(a[v.x][v.y]!='X'&& d[w.x][w.y] > d[v.x][v.y] + 1 )
            {
                d[w.x][w.y] = d[v.x][v.y] + 1;
                q.push(v);
            }
        }
    }
}
int main()
{
    int minim=10000 , xf , yf ;
    Citire();
    Lee(xr , yr , R);
    Lee(xj , yj , J);
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
        {
            if (R[i][j]==J[i][j] && R[i][j]<minim) {xf=i;yf=j;minim=R[i][j];}
        }
    ofstream fout ("rj.out");
    fout << minim << " " << xf << " " << yf << "\n" ;
    for (i = 1; i <= n; ++i)
    {
        for (j = 1; j <= n; ++j)
            fout << R[i][j] << " " ;
        fout << endl ;
    }
    for (i = 1; i <= n; ++i)
        {
            for (j = 1; j <= n; ++j)
                fout << J[i][j] << " " ;
            fout << endl ;
        }
    return 0;
}