Cod sursa(job #1641776)

Utilizator OXIgeniusAilenei Dorin OXIgenius Data 9 martie 2016 10:47:46
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.87 kb
#include <fstream>

using namespace std;

ifstream in("rj.in");
ofstream out("rj.out");

int bine(int ii, int jj,int n, int m)
{
    return(ii>=0&&ii<n&&jj>=0&&jj<m);
}
void lee(int n,int m, int mat[][100],int xi, int yi)
{
    int k,ii,jj,cx[10000],cy[10000],pi,ps;
    cx[0]=xi;
    cy[0]=yi;
    pi=0;
    ps=0;
    int dx[]={-1,0,1,0,-1,1,1,-1};
    int dy[]={0,1,0,-1,1,1,-1,-1};
    mat[xi][yi]=1;
    while(pi<=ps)
    {
        for(k=0;k<8;k++)
        {
        ii=cx[pi]+dx[k];
        jj=cy[pi]+dy[k];
        if(bine(ii,jj,n,m)==1)/// daca folosesc bordare scap de aceasta functie
            if(mat[ii][jj]==0)
            {
                mat[ii][jj]=mat[cx[pi]][cy[pi]]+1;///programare dinamica(P.D)
                ps++;
                cx[ps]=ii;
                cy[ps]=jj;
            }
        }
        pi++;
    }
}

int main()
{
    char x[101];
    int matr[100][100],matj[100][100],rx,ry,jx,jy,i,j,n,m,ci,cj,minn;
    in>>n>>m;
    in.get();
    for(i=1;i<=n;i++)
    {
        in.getline(x+1,101+1,'\n');
        for(j=1;j<=m;j++)
        {
            matr[i][j]=0;
            matj[i][j]=0;
            if(x[j]=='X')
            {
                matr[i][j]=1;
                matj[i][j]=1;
            }

            if(x[j]=='J')
            {
                jx=i;
                jy=j;
            }
            if(x[j]=='R')
            {
                rx=i;
                ry=j;
            }
        }
    }
    lee(n,m,matj,jx,jy);
    lee(n,m,matr,rx,ry);
    minn=100*100;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(matj[i][j]==matr[i][j]&&matr[i][j]>1)
                if(minn>matr[i][j])
                {
                    minn=matr[i][j];
                    ci=i;
                    cj=j;
                }
    out<<minn<<" "<<ci<<" "<<cj;
    return 0;
}