Cod sursa(job #2272247)

Utilizator anamariatoaderAna Toader anamariatoader Data 29 octombrie 2018 21:27:18
Problema Rj Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.07 kb
#include <fstream>

using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
short int i,j,n,m,lr,cr,lj,cj;
int dx[]={0,-1,-1,0,1,1,1,0,-1},dy[]={0,0,1,1,1,0,-1,-1,-1},a[101][101],b[101][101];
int Min,linie,coloana;
bool v[101][101];
char s[101];
struct numar{
    int l,c;
}q[10005];
void romeo(int i, int j){
    int p,u,l,c,lnou,cnou,k;
    p=u=1;
    q[1].l=i;
    q[1].c=j;
    b[i][j]=1;
    while(p<=u){
        l=q[p].l;
        c=q[p].c;
        for(k=1;k<=8;k++){
            lnou=l+dx[k];
            cnou=c+dy[k];
            if(v[lnou][cnou]==0 && lnou>=1 && lnou<=n && cnou>=1 && cnou<=m && b[lnou][cnou]==0){
                q[++u].l=lnou;
                q[u].c=cnou;
                b[lnou][cnou]=b[l][c]+1;
            }
        }
        p++;
    }
}
void julieta(int i, int j){
    int p,u,l,c,lnou,cnou,k;
    p=u=1;
    q[1].l=i;
    q[1].c=j;
    a[i][j]=1;
    while(p<=u){
        l=q[p].l;
        c=q[p].c;
        for(k=1;k<=8;k++){
            lnou=l+dx[k];
            cnou=c+dy[k];
            if(v[lnou][cnou]==0 && lnou>=1 && lnou<=n && cnou>=1 && cnou<=m && a[lnou][cnou]==0){
                q[++u].l=lnou;
                q[u].c=cnou;
                a[lnou][cnou]=a[l][c]+1;
            }
        }
        p++;
    }
}
int main()
{
    fin>>n>>m;
    fin.get();
    for(i=1;i<=n;i++){
        fin.getline(s,100);
        for(j=0;s[j]!=0;j++)
            if(s[j]=='X')
                v[i][j+1]=1;
            else
                if(s[j]=='R'){
                    lr=i;
                    cr=j+1;
                }
                else
                    if(s[j]=='J'){
                        lj=i;
                        cj=j+1;
                    }
    }
    romeo(lr,cr);
    julieta(lj,cj);
    Min=10010;
    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]<Min){
                Min=a[i][j];
                linie=i;
                coloana=j;
            }
    fout<<Min<<" "<<linie<<" "<<coloana;
    return 0;
}