Cod sursa(job #2265017)

Utilizator AnghelinaMaraAnghelina Mara AnghelinaMara Data 20 octombrie 2018 15:10:22
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.87 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <string.h>
using namespace std;

int a[100][100],b[100][100];
queue <pair <int,int> > Q;

void bordare(int n, int m, int a[100][100])
{
    for(int i=0; i<=n+1; i++)
    {
        a[i][0]=-1;
        a[i][m+1]=-1;
    }
    for(int j=0; j<=m+1; j++)
    {
        a[0][j]=-1;
        a[n+1][j]=-1;
    }
}

const int di[]= {-1,0,1, 0};
const int dj[]= {0,-1,0, 1};

void lee(int x,int y,int a[100][100])
{
    a[x][y]=1;
    Q.push(make_pair(x,y));
    while(!Q.empty())
    {
        pair<int,int> p=Q.front();
        Q.pop();
        for(int k=0; k<4; k++)
        {
            if(a[p.first+di[k]][p.second+dj[k]]==0)
            {
                a[p.first+di[k]][p.second+dj[k]] = 1 + a[p.first][p.second];
                Q.push(make_pair(p.first+di[k] , p.second+dj[k]));
            }
        }
    }
}

int main()
{
    ifstream f("rj.in");
    ofstream g("rj.out");
    int N,M,ir,jr,ij,jj,mini=9999;
    char v;
    f>>N>>M;
    bordare(N,M,a);bordare(N,M,b);
    f.get();
    for(int i=1; i<=N; i++)
    {
        for(int j=1; j<=M; j++)
        {
            f.get(v);

            if(v=='X')   {a[i][j]=-1;b[i][j]=a[i][j];}
            else if(v==' ')    {a[i][j]=0;b[i][j]=a[i][j];}
            else if(v=='R')
            {
                ir=i;
                jr=j;
                a[i][j]=0;b[i][j]=a[i][j];
            }
            else
            {
                ij=i;
                jj=j;
                a[i][j]=0;b[i][j]=a[i][j];
            }

        }
        f.get();
    }

lee(ir,jr,a);
lee(ij,jj,b);
for(int i=1;i<=N;i++)
    for(int j=1;j<=M;j++)
        if(a[i][j]!=-1)
           if(a[i][j]==b[i][j]&&a[i][j]<mini)
               {mini=a[i][j]; ir=i;
               jr=j;}
cout<<mini<<" "<<ir<<" "<<jr;


    return 0;
}