Cod sursa(job #1618423)

Utilizator DenisVieriuDenis Vieriu DenisVieriu Data 27 februarie 2016 20:06:31
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.08 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
#define nmax 101
int R[nmax][nmax],J[nmax][nmax],n,m,xR,yR,xJ,yJ;
queue <pair<int , int> > QR,QJ;
const int dx[]={-1,-1,0,1,1,1,0,-1};
const int dy[]={0,1,1,1,0,-1,-1,-1};
ofstream g("rj.out");
void citire()
{

    ifstream f("rj.in");
    char x[nmax];
    f>>n>>m;
    f.get();
    for(int i=1;i<=n;i++)
    {
        f.getline(x,nmax,'\n');
        for(int j=0;j<m;j++)
        {

            if(x[j]=='R')
            {
                xR=i;
                yR=j+1;
            }
            else
                if(x[j]=='X')
                R[i][j+1]=J[i][j+1]=-1;
            else
                if(x[j]=='J')
            {
                xJ=i;
                yJ=j+1;

            }
        }
    }

    f.close();
}
bool OK(int i, int j,int a[][nmax] )
{
    if( i<1 || i>n || j<1 || j>m)
        return false;
    if(a[i][j]!=0)
        return false;
    return true;
}
void lee(int x,int y,queue <pair <int ,int > > Q, int a[][nmax])
{
    int xx,yy;
    a[x][y]=1;
    Q.push(make_pair(x,y));
    while(!Q.empty())
    {
        x=Q.front().first;
        y=Q.front().second;
        Q.pop();
        for(int i=0;i<8;i++)
        {
            xx=x+dx[i];
            yy=y+dy[i];
            if(OK(xx,yy,a))
            {
                a[xx][yy]=a[x][y]+1;
                Q.push(make_pair(xx,yy));
            }
        }

    }
}
void afisare(int X[][nmax])
{
    g<<endl;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
            g<<X[i][j]<<" ";
        g<<endl;
    }
    g<<endl;
}
int main()
{
    citire();
    lee(xR,yR,QR,R);
    lee(xJ,yJ,QJ,J);

    int tmin=10000,pi=0,pj=0;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
            if(R[i][j]==J[i][j]&&R[i][j]!=-1&&R[i][j]!=0)
            if(tmin>R[i][j])
            {
                tmin=R[i][j];
                pi=i;
                pj=j;
            }
    }
    g<<tmin<<" "<<pi<<" "<<pj;

    g.close();
        return 0;
}