Cod sursa(job #1887390)

Utilizator StepHoria Stefan Step Data 21 februarie 2017 16:10:28
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.45 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
const int N=102;
const int dl[4]= {1,0,-1,0};
const int dc[4]= {0,1,0,-1};
char a[N][N];
int dr[N][N],dj[N][N];
struct poz
{
    int l,c;
} x,y,xj,xr;
poz q[N*N];
int i,j,min1,min2;
void bordare (int n, int m)
{
    int i;
    for (i=0; i<=n; i++)
    {
        dr[i][0]=-99;
        dr[i][n+1]=-99;
    }
    for (i=0; i<=m; i++)
    {
        dr[0][i]=-99;
        dr[n+1][i]=-99;
    }
    for (i=0; i<=n; i++)
    {
        dj[i][0]=-99;
        dj[i][n+1]=-99;
    }
    for (i=0; i<=m; i++)
    {
        dj[0][i]=-99;
        dj[n+1][i]=-99;
    }
}

int lee (poz x0,int d[N][N])
{
    int p=0,u=-1;
    q[++u] = x0;
    while (p<=u)
    {
        x=q[p++];
        for (i=0; i<4; i++)
        {
            y.l=x.l+dl[i];
            y.c=x.c+dc[i];
            if (d[y.l][y.c]==-1)
            {
                d[y.l][y.c] = 1 + d[x.l][x.c];
                q[++u] = y;
            }
        }
    }
}

int main()
{
    int n,m,min=99999;
    f>>n>>m>>ws;
    for (i=1; i<=n; i++)
    {
        f.getline(1+a[i],N);
        for (j=1; j<=m; j++)
        {
            if (a[i][j]=='X')
            {
                dj[i][j]=-99;
                dr[i][j]=-99;
            }
            if (a[i][j]==' ')
            {
                dj[i][j]=-1;
                dr[i][j]=-1;
            }
            if (a[i][j]=='R')
            {
                dr[i][j]=0;
                xr = (poz)
                {
                    i, j
                };
            }
            if (a[i][j]=='J')
            {
                dj[i][j]=0;
                xj = (poz)
                {
                    i, j
                };
            }
        }
    }
    bordare(n,m);
    lee(xr,dr);
    lee (xj,dj);
    for (i=1; i<=n; i++)
        for (j=1; j<=m; j++)
            if (dr[i][j]==dj[i][j])
                if (min>dr[i][j]&&dr[i][j]>0)
                {
                    min=dr[i][j];
                    min1 =i;
                    min2=j;
                }
    for (i=1;i<=n;i++)
    {
        for (j=1; j<=m;j++)
            cout<<dr[i][j]<<" ";
        cout<<endl;
    }
    cout<<endl<<endl;
    for (i=1;i<=n;i++)
    {
        for (j=1; j<=m;j++)
            cout<<dj[i][j]<<" ";
        cout<<endl;
    }
    g<<min<<" "<<min1<<" "<<min2;

    return 0;
}