Cod sursa(job #2503878)

Utilizator RrimGeaperStoica Vlad-MIhail RrimGeaper Data 3 decembrie 2019 21:13:38
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.17 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int dcol[8]={0,-1,1,1,0,1,-1,-1},dlin[8]={-1,-1,0,-1,1,1,0,1};
struct cap{
    int l;
    int c;
};
cap coada[10001];
void lee(int mat[102][102],int lp,int cp){
    int sf,inc,lin,col,i;
    sf=1;
    inc=1;
    mat[lp][cp]=1;
    coada[1].l=lp;
    coada[1].c=cp;
    while(inc<=sf){
        for(i=0;i<8;i++){
            lin=coada[inc].l+dlin[i];
            col=coada[inc].c+dcol[i];
            if(mat[lin][col]==0){
                sf++;
                coada[sf].l=lin;
                coada[sf].c=col;
                mat[lin][col]=mat[coada[inc].l][coada[inc].c]+1;
            }
        }
        inc++;
    }
}
int rom[102][102],jul[102][102];
int main()
{
    ifstream in("rj.in");
    ofstream out("rj.out");
    char a[101],ch;
    int n,m,lini,coli,minn=10001,lpj,cpj,lpr,cpr,i,j;
    in>>n>>m;
    for(i=0;i<=n+1;i++){
        rom[i][0]=-1;
        rom[i][m+1]=-1;
        jul[i][0]=-1;
        jul[i][m+1]=-1;
    }
    for(j=0;j<=m+1;j++){
        rom[0][j]=-1;
        rom[n+1][j]=-1;
        jul[0][j]=-1;
        jul[n+1][j]=-1;
    }
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            rom[i][j]=5;
    in.get(ch);
    for(i=1;i<=n;i++){
        in.getline(a+1,m+1);
        for(j=1;j<=m;j++){
            if(a[j]==' ')
                rom[i][j]=0;
            if(a[j]=='X')
                rom[i][j]=-1;
            if(a[j]=='R'){
                lpr=i;
                cpr=j;
                rom[i][j]=0;
            }
            if(a[j]=='J'){
                lpj=i;
                cpj=j;
                rom[i][j]=0;
            }
            jul[i][j]=rom[i][j];
        }
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++)
            cout<<rom[i][j]<<" ";
        cout<<'\n';
    }
    lee(rom,lpr,cpr);
    lee(jul,lpj,cpj);
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(rom[i][j]==jul[i][j] && rom[i][j]<minn && rom[i][j]!=-1 && rom[i][j]!=0){
               lini=i;
               coli=j;
               minn=rom[i][j];
            }
    out<<minn<<" "<<lini<<" "<<coli;
    return 0;
}