Cod sursa(job #2952800)

Utilizator anghelpatrickPatrick Anghel anghelpatrick Data 9 decembrie 2022 23:20:20
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.2 kb
#include <fstream>
#include <queue>

using namespace std;

ifstream cin("rj.in");
ofstream cout("rj.out");

int a[1005][1005],b[1005][1005], i , j , n , m ;
int dl[]= {-1,0,1,0,-1,1,1,-1},dc[]= {0,1,0,-1,1,-1,1,-1};

struct pozitie
{
    int lin,col;
};

queue <pozitie> c;
pozitie R,J;

void citire()
{
    char x;
    int i,j;
    cin >> n >> m;
    for( i = 1 ; i <= n ; i ++ )
    {
        cin.get() ;
        for( j = 1 ; j <= m; j++)
        {
            cin.get(x);
            if(x==' ')/// marcam cu 0
            {
                a[i][j]=0 ;
                b[i][j]=0;
            }
            if(x=='X')/// marcam cu 1 si -1 pe b[i][j]
            {
                a[i][j] = 1 ;
                b[i][j]=-1;
            }
            if(x=='R')
            {
                a[i][j] = 1 ;
                R.lin = i ;
                R.col = j ;
            }
            if(x=='J')
            {
                b[i][j] = 1 ;
                J.lin = i ;
                J.col = j ;
            }
        }
    }
}
void lee(int lin,int col,int a[1005][1005])
{
    pozitie poz1,poz2;

    c.push({lin,col});

    while(!c.empty())
    {
        poz1=c.front();
        c.pop();
        for(int i = 0 ; i < 8 ; i ++ )
        {
            poz2.lin=poz1.lin+dl[i];
            poz2.col=poz1.col+dc[i];

            if(poz2.lin>=1 && poz2.lin<=n && poz2.col>=1 && poz2.col<=m && a[poz2.lin][poz2.col]==0)
            {
                a[poz2.lin][poz2.col] = a[poz1.lin][poz1.col] +1 ;
                c.push(poz2);
            }
        }
    }
}
void afisare(int a[1005][1005])
{
    for( i = 1 ; i <= n ; i ++ )
    {
        for( j = 1 ; j <= m ; j ++ )
            cout<<a[i][j]<<" ";
        cout<<"\n";
    }
}
int main()
{
    int jj,ii;
    int mini=100000003;

    citire();

    lee(R.lin,R.col,a);
    lee(J.lin,J.col,b);

    for( i = 1 ; i <= n ; i ++ )
        for( j = 1 ; j <= m ; j ++ )
            if(a[i][j]==b[i][j] && a[i][j] > 0 && a[i][j] < mini )
            {
                ii = i ;
                jj = j ;
                mini = a[i][j] ;
            }
    cout<<mini<<" "<<ii<<" "<<jj;
    return 0;
}