Cod sursa(job #1671744)

Utilizator Bodo171Bogdan Pop Bodo171 Data 2 aprilie 2016 09:52:29
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.05 kb
#include <iostream>
#include<fstream>
#include<deque>
#include<string>
using namespace std;
string s;
deque<int> l,c;

int n,m,i,j,r[105][105],ju[105][105],r1,r2,j1,j2,li,lf,ci,cf,x,y,tmin,mn=(1<<30);
int main()
{
    ifstream f("rj.in");
    ofstream g("rj.out");
    int d1[]={-1,-1,-1,0,0,1,1,1};
    int d2[]={-1,0,1,-1,1,-1,0,1};
    f>>n>>m;
    f.get();
    for(i=1;i<=n;i++)
    {
        getline(f,s);
        for(j=0;j<=m-1;j++)
        {
            if(s[j]=='X')
            {
                r[i][j+1]=-1;
                ju[i][j+1]=-1;
            }
            else
            if(s[j]=='R')
            {
                r1=i;
                r2=j+1;
                r[r1][r2]=1;
            }
            else
            if(s[j]=='J')
            {
               j1=i;
               j2=j;
               ju[j1][j2]=1;
            }
        }
    }
   l.push_back(r1);
   c.push_back(r2);
   while(!l.empty())
   {
       li=l.front();
       ci=c.front();
       l.pop_front();
       c.pop_front();
       if(li!=0 && ci!=0 && li!=n+1&&ci!=m+1)
       for(i=0;i<8;i++)
       {
           lf=li+d1[i];
           cf=ci+d2[i];
           if(r[lf][cf]==0)
           {
               r[lf][cf]=r[li][ci]+1;
               l.push_back(lf);
               c.push_back(cf);
           }
       }
   }
    l.push_back(j1);
   c.push_back(j2);
   while(!l.empty())
   {
       li=l.front();
       ci=c.front();
       l.pop_front();
       c.pop_front();
       if(li!=0 && ci!=0 && li!=n+1&&ci!=m+1)
       for(i=0;i<8;i++)
       {
           lf=li+d1[i];
           cf=ci+d2[i];
           if(ju[lf][cf]==0)
           {
               ju[lf][cf]=ju[li][ci]+1;
               l.push_back(lf);
               c.push_back(cf);
           }
       }
   }
   for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
   {
       if(r[i][j]==ju[i][j]&& r[i][j]<mn &&r[i][j]!=-1)
       {
           tmin=r[i][j];
           x=i;
           y=j;
       }
   }
   g<<tmin<<' '<<x<<' '<<y;
    return 0;
}