Cod sursa(job #1885573)

Utilizator pasca.mariaPasca Maria pasca.maria Data 20 februarie 2017 08:31:53
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.83 kb
#include<iostream>
#include<fstream>
#include<cstring>
#include<queue>
using namespace std;
fstream fin("rj.in",ios::in), fout("rj.out",ios::out);
char q[105][105];
pair<int,int>R;
pair<int,int>J;
queue<pair<int,pair<int,int> > >D;
int n,m,p[105][105],d;
int di[]={-1,0,1,0}, dj[]={0,1,0,-1},drum=0;
void parcR()
{
    int c;
    pair<int,int>x;
    while(!D.empty())
    {
        d=D.front().first;
        x.first=D.front().second.first;
        x.second=D.front().second.second;
        for(c=0;c<=3;c++)
        {
            if(p[x.first+di[c]][x.second+dj[c]]==0)
            {
                p[x.first+di[c]][x.second+dj[c]]=p[x.first][x.second]+1;
                D.push(make_pair(p[x.first+di[c]][x.second+dj[c]],make_pair(x.first+di[c],x.second+dj[c])));
            }
        }
        D.pop();
    }
}
void parcJ()
{
    int c,d=1,ok=1;
    pair<int,int>x;
    while(!D.empty())
    {
        d++;
        x.first=D.front().second.first;
        x.second=D.front().second.second;
        for(c=0;c<=3;c++)
        {
            if(p[x.first+di[c]][x.second+dj[c]]>0)
            {
                p[x.first+di[c]][x.second+dj[c]]=p[x.first+di[c]][x.second+dj[c]]-d;
                if(p[x.first+di[c]][x.second+dj[c]]==0)
                {
                    fout<<drum+1<<" "<<x.first+di[c]<<" "<<x.second+dj[c]<<"\n";
                    //fout<<drum<<" "<<x.first<<" "<<x.second<<"\n";
                    ok=0;
                    break;
                }
                D.push(make_pair(p[x.first+di[c]][x.second+dj[c]],make_pair(x.first+di[c],x.second+dj[c])));
            }
        }
        if(ok==0)
        {
            break;
        }
        drum++;
        D.pop();
    }

}
int main()
{
    int i,j;
    fin>>n>>m;
    fin.get();
    for(i=0;i<n;i++)
    {
        fin.getline(q[i],105);
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            if(q[i][j]=='X')
            {
                p[i+1][j+1]=-1;
            }
            if(q[i][j]=='R')
            {
                p[i+1][j+1]=1;
                R.first=i+1;
                R.second=j+1;
            }
            if(q[i][j]=='J')
            {
                p[i+1][j+1]=1;
                J.first=i+1;
                J.second=j+1;
            }
        }
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            p[i][0]=-1;
            p[i][m+1]=-1;
            p[0][i]=-1;
            p[n+1][i]=-1;
        }
    }
    D.push(make_pair(p[R.first][R.second],make_pair(R.first,R.second)));
    parcR();
    D.push(make_pair(p[J.first][J.second],make_pair(J.first,J.second)));
    parcJ();
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            fout<<p[i][j]<<" ";
        }
        fout<<"\n";
    }
}