Cod sursa(job #2273921)

Utilizator Anakin1001George Giorgiu Gica Anakin1001 Data 1 noiembrie 2018 09:53:16
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int dx[]={0,-1,-1,0,1,1,1,0,-1},dy[]={0,0,1,1,1,0,-1,-1,-1};
int i,j,n,m,a[101][101],b[101][101],d1[101][101],d2[101][101],q[10001][2],x1,x2,y1,y2,mini,px,py;
char S[101];
void coada(int x,int y,int ok){
    int p=0,u=0;
    memset(b,0,sizeof(b));
    q[p][0]=x;
    q[p][1]=y;
    b[x][y]=1;
    while(p<=u){
        int l=q[p][0];
        int c=q[p][1];
        p++;
        for(int k=1;k<=8;k++){
            int ln=l+dx[k];
            int cn=dy[k]+c;
            if(ln>=1&&ln<=n&&cn>=1&&cn<=m)
            if(a[ln][cn]==0&&b[ln][cn]==0){
                q[++u][0]=ln;
                q[u][1]=cn;
                b[ln][cn]=1;
                if(ok==0){
                    d1[ln][cn]=d1[l][c]+1;
                }
                else
                    d2[ln][cn]=d2[l][c]+1;
            }
        }
    }
}
int main()
{   f>>n>>m;
    f.get();
    for(i=1;i<=n;i++){
        f.getline(S,101);
        for(j=0;S[j]!=0;j++)
        if(S[j]=='X')
            a[i][j+1]=1;
        else
        if(S[j]=='R'){
            x1=i;
            y1=j+1;
        }
        else
        if(S[j]=='J'){
            x2=i;
            y2=j+1;
        }
    }
    mini=100001;
    coada(x1,y1,0);
    coada(x2,y2,1);
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
    if(d1[i][j]==d2[i][j]&&mini>d1[i][j]&&a[i][j]==0&&d1[i][j]>0){
        mini=d1[i][j];
        px=i;py=j;
    }
    g<<mini+1<<' '<<px<<' '<<py;
    return 0;
}