Cod sursa(job #1586854)

Utilizator danyvsDan Castan danyvs Data 1 februarie 2016 18:00:23
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.61 kb
#include <fstream>
#include <cstring>

using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");

int dx[8]={-1,-1,-1,0,1,1,1,0};
int dy[8]={-1,0,1,1,1,0,-1,-1};
int a[102][102],n,m;
int xr,yr,xj,yj;


void Citire()
{
    int i,j;
    char c;
    fin>>n>>m;
    fin.get();
    for (i=1; i<=n; i++)
        {
         for (j=1; j<=m; j++)
            {
             fin.get(c);
             if (c=='X') a[i][j]=0;
             else
                if (c==' ') a[i][j]=1;
                else
                    if (c=='R')
                        {
                         xr=i;
                         yr=j;
                         a[i][j]=1;
                        }
                    else
                        if (c=='J')
                            {
                             xj=i;
                             yj=j;
                             a[i][j]=1;
                            }
            }
         fin.get();
        }
}

void Lee(int xi, int yi, int xf, int yf, int v[102][102])
{
    int l[10202],c[10202],pr,ul;
    int xc,yc,xv,yv;
    int i;
    l[1]=xi;
    c[1]=yi;
    pr=ul=1;
    v[xi][yi]=2;
    while (pr<=ul)
        {
         xc=l[pr];
         yc=c[pr];
         pr++;
         for (i=0; i<8; i++)
            {
             xv=xc+dx[i];
             yv=yc+dy[i];
             if (xv>=1 && xv<=n && yv>=1 && yv<=m)
                if (v[xv][yv]==1)
                    if (xv==xf && yv==yf)
                        v[xf][yf]=v[xc][yc]+1;
                    else
                        {
                         ul++;
                         l[ul]=xv;
                         c[ul]=yv;
                         v[xv][yv]=v[xc][yc]+1;
                        }
            }
        }
}

void Intalnire(int romeo[102][102], int julieta[102][102])
{
    int i,j,mn,lin,col;
    for (i=1; i<=n; i++)
        for (j=1; j<=m; j++)
            {
             romeo[i][j]=a[i][j];
             julieta[i][j]=a[i][j];
            }
    Lee(xr,yr,xj,yj,romeo);
    Lee(xj,yj,xr,yr,julieta);
    mn=10203;
    for (i=1; i<=n; i++)
        for (j=1; j<=m; j++)
            if (romeo[i][j]==julieta[i][j] && romeo[i][j]!=0 && romeo[i][j]!=1)
                if (romeo[i][j]<mn)
                    {
                     mn=romeo[i][j];
                     lin=i;
                     col=j;
                    }
    fout<<mn-1<<" "<<lin<<" "<<col;
}

int main()
{
    int i,j,romeo[102][102],julieta[102][102];
    Citire();
    Intalnire(romeo,julieta);
    fin.close();
    fout.close();
    return 0;
}