Cod sursa(job #1023455)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 6 noiembrie 2013 23:24:11
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.81 kb
#include <fstream>
using namespace std;
ifstream fin ("rj.in");
ofstream fout ("rj.out");
char x[101][101];
int i,j,ir,jr,ij,jj,n,m,iv,jv,ic,jc,p,u,minim,imin,jmin,ok,d;
int di[]={-1,-1,-1, 0, 0, 1, 1, 1};
int dj[]={-1, 0, 1,-1, 1,-1, 0, 1};
int ro[101][101],ju[101][101], c[3][10001];

int main () {

    // freopen ("rj.in", "r", stdin);
    //freopen ("rj.out", "w" , stdout);

  /*scanf ("%d%d", &n,&m);
    scanf ("\n");
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            scanf("%c",&x[i][j]);
            if (x[i][j] == 'R'){
                ir = i;
                jr = j;
            }
            if (x[i][j] == 'J'){
                ij=i;
                jj=j;
            }
        }
        scanf("\n");
    }
    for (i=1;i<=n;i++) {
        for (j=1;j<=m;j++) {
            if (x[i][j]== 'R' )
                ro[i][j]=1;

            if (x[i][j]== 'J' )
                ju[i][j]=1;

            if (x[i][j]=='X')
                ro[i][j]=ju[i][j]=-1;
        }
    }*/
    fin>>n>>m;
    fin.get(x[0][0]);
    for(i=1;i<=n;i++)
    {
        fin.getline(x[i]+1,m+5);
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(x[i][j]=='R')
            {
                ir=i;
                jr=j;
                ro[i][j]=1;
            }
            else if(x[i][j]=='J')
            {
                ij=i;
                jj=j;
                ju[i][j]=1;
            }
            else if(x[i][j]=='X')
            {
                ro[i][j]=ju[i][j]=-1;
            }
            else
                x[i][j]=' ';

        }
        x[i][m+1]=0;
    }
    p=u=1;
    c[0][1]=ir;
    c[1][1]=jr;

    while (p<=u) {

        ic=c[0][p];
        jc=c[1][p];
        for (d=0;d<=7;d++) {
            iv=ic+di[d];
            jv=jc+dj[d];
            if (iv>=1&&iv<=n&&jv>=1&&jv<=m&&ro[iv][jv]==0) {
                u++;
                c[0][u]=iv;
                c[1][u]=jv;
                ro[iv][jv]=ro[ic][jc]+1;
            }
        }
        p++;
    }
    p=u=1;
    c[0][1]=ij;
    c[1][1]=jj;

    while (p<=u) {

        ic=c[0][p];
        jc=c[1][p];
        for (d=0;d<=7;d++) {
            iv=ic+di[d];
            jv=jc+dj[d];
            if (iv>=1&&iv<=n&&jv>=1&&jv<=m&&ju[iv][jv]==0) {
                u++;
                c[0][u]=iv;
                c[1][u]=jv;
                ju[iv][jv]=ju[ic][jc]+1;
            }
        }
        p++;
    }
    minim = n*m +10;
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
            if (ro[i][j]==ju[i][j]&&ro[i][j]>0)
                if (ro[i][j]<minim){
                    minim=ro[i][j];
                    imin=i;
                    jmin=j;
                }
    fout << minim<<" "<< imin <<" "<<jmin<<"\n";
    return 0;

}