Cod sursa(job #2338239)

Utilizator DragescuLeonardDragescuLeonard DragescuLeonard Data 7 februarie 2019 11:04:25
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.33 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");

char s[110];
int i,j,a[101][101],b[101][101],n,m,rx,ry,jx,jy,pr,ul,k,is,js,ss=INT_MAX;

int dx[]={-1,-1,-1,0,1,1,1,0};
int dy[]={-1,0,1,1,1,0,-1,-1};

struct pos
{
    int x,y;
};
pos q[1010];
void rlee()
{
   pr=ul=1;
   a[rx][ry]=1;
   q[ul].x=rx;
   q[ul].y=ry;
   while(pr<=ul)
   {
       i=q[pr].x;
       j=q[pr].y;
       pr++;
       for(k=0;k<=7;k++)
       {
           if(a[i+dx[k]][j+dy[k]]==0)
           {
               ul++;
               q[ul].x=i+dx[k];
               q[ul].y=j+dy[k];
               a[i+dx[k]][j+dy[k]]=a[i][j]+1;
           }
       }
   }
}
void jlee()
{
   pr=ul=1;
   b[jx][jy]=1;
   q[ul].x=jx;
   q[ul].y=jy;
   while(pr<=ul)
   {
       i=q[pr].x;
       j=q[pr].y;
       pr++;
       for(k=0;k<=7;k++)
       {
           if(b[i+dx[k]][j+dy[k]]==0)
           {
               ul++;
               q[ul].x=i+dx[k];
               q[ul].y=j+dy[k];
               b[i+dx[k]][j+dy[k]]=b[i][j]+1;
           }
       }
   }
}
int main()
{
    fin>>n>>m;
    fin.get();
    for(i=1;i<=n;i++)
    {
        fin.getline(s,110);
        for(j=0;j<=m-1;j++)
            if(s[j]==' ')
            a[i][j+1]=0;
        else
            if(s[j]=='X')
            a[i][j+1]=-1;
        else
            if(s[j]=='R')
            {
                rx=i;
                ry=j+1;
            }
        else
            {
                jx=i;
                jy=j+1;
            }
    }
    for(i=0;i<=n+1;i++)
        a[i][0]=a[i][m+1]=-1;
    for(i=0;i<=m+1;i++)
        a[0][i]=a[n+1][i]=-1;
    for(i=0;i<=n+1;i++)
        for(j=0;j<=m+1;j++)
        b[i][j]=a[i][j];
        rlee();
        jlee();
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        if(a[i][j]==b[i][j] && a[i][j]>1 && a[i][j]<=ss)
        {
            ss=a[i][j];
            is=i;
            js=j;
        }
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        if(a[i][j]==b[i][j] && a[i][j]==ss && i<is)
        {
            is=i;
            js=j;
        }
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        if(a[i][j]==b[i][j] && a[i][j]==ss && j<js)
        {
            is=i;
            js=j;
        }
        fout<<ss<<" "<<is<<" "<<js;
}