Cod sursa(job #1841153)

Utilizator alesalexandru chirila ales Data 5 ianuarie 2017 13:18:44
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.82 kb
# include <iostream>
# include <fstream>
# include <queue>
# include <cstring>
using namespace std;

ifstream f("rj.in");
ofstream g("rj.out");

queue <pair<int,int> >c;
int dc[]= {1,-1,0,0,1,-1,-1,1},dl[]= {-1,1,-1,1,0,0,1,-1},dir,n,m,ro[102][102],ju[102][102],xr,yr,xj,yj;
char a[102][102];

bool ok(int i,int j)
{
    if(ro[i][j]==-1 || i<1 || j<1 || i>n || j>m)    return false;
    return true;
}

void lee(int b[102][102],int x,int y)
{
    while(!c.empty()) c.pop();
    memset(b,0,sizeof(b));
    int i_urm,j_urm,i,j;
    c.push(make_pair(x,y));
    b[x][y]=1;
    while(!c.empty())
    {
        i=c.front().first;
        j=c.front().second;
        c.pop();
        for(dir=0; dir<=7; ++dir)
        {
            i_urm=dl[dir]+i;
            j_urm=dc[dir]+j;
            if(ok(i_urm,j_urm)&& b[i_urm][j_urm]==0)
            {
                c.push(make_pair(i_urm,j_urm));
                b[i_urm][j_urm]=b[i][j]+1;
            }
        }
    }
}

void cit()
{
    char ch;
    f>>n>>m;
    f.get();
    int i,j;
    for(i=1; i<=n; ++i)
    {
        for(j=1; j<=m; ++j)
        {
            f.get(ch);
            if(ch=='R')
            {
                xr=i;      yr=j;
            }
            else if(ch=='J')
            {
                xj=i;       yj=j;
            }
            else if(ch=='X' || ch=='x')
            {
                ro[i][j]=-1;       ju[i][j]=-1;
            }
        }
        f.get();
    }
}
int main()
{
    int mini=10201,i,u,min1,min2;
    cit();
    lee(ro,xr,yr);
    lee(ju,xj,yj);
    for(i=1; i<=n; ++i)
        for(u=1; u<=m; ++u)if(ro[i][u]==ju[i][u] && ro[i][u]<mini)
            {
                mini=ro[i][u];
                min1=i;
                min2=u;
            }
    cout<<mini<<" "<<min1<<" "<<min2;
}