Cod sursa(job #2696460)

Utilizator un_fes_galbendaniel guba un_fes_galben Data 15 ianuarie 2021 22:10:55
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.94 kb
#include <fstream>
#include <queue>
using namespace std;
int mat[105][105],mat1[3][105][105];
queue<int>lin;
queue<int>col;
int dlin[10]={-1,-1,0,1,1,1,0,-1};
int dcol[10]={0,1,1,1,0,-1,-1,-1};
void Lee(int nr)
{
    while(!lin.empty())
    {
        int i=lin.front(),j=col.front();
        for(int k=0;k<8;k++)
        {
            int i1=i+dlin[k],j1=j+dcol[k];
            if(mat[i1][j1]==0&&mat1[nr][i1][j1]==0)
            {
                mat1[nr][i1][j1]=mat1[nr][i][j]+1;
                lin.push(i1);
                col.push(j1);
            }
        }
        lin.pop();
        col.pop();
    }
}
int main()
{
   ifstream fin("rj.in");
   ofstream fout("rj.out");
   string s;
   int n,m,p1,p2,p3,p4;
   fin>>n>>m;
   getline(fin,s);
   for(int i=1;i<=n;i++)
   {
        getline(fin,s);
       for(int j=1;j<=s.size();j++)
       {
           if(s[j-1]==' ')
           {
               mat[i][j]=0;
           }
           else if(s[j-1]=='X')
           {
               mat[i][j]=1;
           }
           else if(s[j-1]=='R')
           {
               p1=i;p2=j;
               mat1[0][i][j]=1;
           }
           else if(s[j-1]=='J')
           {
               p3=i;p4=j;
                mat1[1][i][j]=1;
           }
       }
   }
   for(int i=0;i<=n+1;i++)
   {
       mat[i][0]=mat[i][m+1]=1;
   }
   for(int i=0;i<=m+1;i++)
   {
       mat[0][i]=mat[n+1][i]=1;
   }
   lin.push(p1);col.push(p2);
   Lee(0);
    lin.push(p3);col.push(p4);
   Lee(1);
   int l,c,tmin=2100000000;
   for(int i=1;i<=n;i++)
   {
       for(int j=1;j<=m;j++)
       {
           if(mat1[0][i][j]!=0&&mat1[1][i][j]!=0&&mat1[0][i][j]==mat1[1][i][j])
           {
               if(mat1[0][i][j]<tmin)
               {
                   l=i;c=j;
                   tmin=mat1[0][i][j];
               }
           }
       }
   }
   fout<<tmin<<" "<<l<<" "<<c<<'\n';
    return 0;
}