Cod sursa(job #2951919)

Utilizator dragos1102Dragos Vieru dragos1102 Data 7 decembrie 2022 21:01:07
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <fstream>
#include <string.h>
#include <climits>
using namespace std;
ifstream fin ("rj.in");
ofstream fout ("rj.out");
short int di[]={-1,-1,-1,0,0,1,1,1};
short int dj[]={-1,0,1,1,-1,1,0,-1};
int n,m,i,j,ri,rj,ji,jj,d[101][101],d1[101][101],i6,j6;
char x[105];
bool a1[101][101];
struct far {
    int lin,col;
}q[10001];
int main() {
int minim=INT_MAX;
fin>>n >>m;
fin.getline(x,105);
for(i=1;i<=n;i++) {
    fin.getline(x+1,105);
    for(j=1;j<=m;j++) {
        if(x[j]=='X') {
            a1[i][j]=1;
            d[i][j]=-1;
            d1[i][j]=-1;
        }
        if(x[j]=='J') {
            ji=i,jj=j;
        }
        if(x[j]=='R') {
            ri=i,rj=j;
        }
    }
}
int p=1;
int u=1;
q[u].lin=ji, q[u].col=jj;
d[ji][jj]=1;
while(p<=u) {
    int l=q[p].lin;
    int c=q[p].col;
    for(int i=0;i<8;i++) {
        int lv=l+di[i];
        int cv=c+dj[i];
        if(lv>=1 && lv<=n && cv>=1 && cv<=m && d[lv][cv]==0 && a1[lv][cv]==0) {
            u++;
            q[u].lin=lv, q[u].col=cv;
            d[lv][cv]=d[l][c]+1;
        }
    }
    p++;
}
p=1;
u=1;
q[u].lin=ri, q[u].col=rj;
d1[ri][rj]=1;
while(p<=u) {
    int l=q[p].lin;
    int c=q[p].col;
    for(int i=0;i<8;i++) {
        int lv=l+di[i];
        int cv=c+dj[i];
        if(lv>=1 && lv<=n && cv>=1 && cv<=m && d1[lv][cv]==0 && a1[lv][cv]==0) {
            u++;
            q[u].lin=lv, q[u].col=cv;
            d1[lv][cv]=d1[l][c]+1;
        }
    }
    p++;
}

for(i=1;i<=n;i++) {
    for(j=1;j<=m;j++) {
    if(d[i][j]==d1[i][j]) {
        if(d[i][j]<minim && d[i][j]>0) {
            minim=d[i][j];
            i6=i;
            j6=j;
        }
    }
    }
}
fout<<minim <<' '<<i6<<' '<<j6;
return 0;
}
/// 2390 aia cu rj