Cod sursa(job #891048)

Utilizator baitan_biancaBaitan Bianca baitan_bianca Data 25 februarie 2013 13:17:58
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.82 kb
#include <fstream>
#include<iostream>
using namespace std;
int n, mR[100][100],mJ[100][100],m,xJ,yJ,xR,yR,j,yj,yi,x[10000],y[10000];
const int dx[]={-1,-1,0,1,1,1,0,-1};
const int dy[]={0,1,1,1,0,-1,-1,-1};

int bune(int ii,int jj)
    {

        return((ii>=0)&&(ii<n)&&(jj>=0)&&(jj<m));
    }
void leec(int mat[100][100],int first,int last)
{
    int ii,jj,k,pas;

    while(first<=last)
    {
        for(k=0;k<8;k++)
        {

            ii=x[first]+dx[k];
            jj=y[first]+dy[k];

            if(bune(ii,jj)==1)
            {
                 pas=mat[x[first]][y[first]];

            if((mat[ii][jj]==0)||(mat[ii][jj]>pas+1))
            {

                pas=pas+1; mat[ii][jj]=pas;
                last=last+1;x[last]=ii;y[last]=jj;
            }}
        }
        first=first+1;
    }
}

int main()
{
    ifstream in("rj.in");char sir[101];
    in>>n>>m;
    in.get(); int i,j,first,xf,yf,last,minim;
    for(i=0;i<n;i++)
    {

        in.getline(sir,101,'/n');
        for(j=0;j<m;j++)
        {

            if(sir[j]=='R'){mR[i][j]=1; xR=i; yR=j;}
            if(sir[j]=='J'){mJ[i][j]=1; xJ=i; yJ=j;}
            if(sir[j]=='X'){mR[i][j]=1; mJ[i][j]=1;}
        }
    }
    in.close();
    first=0;last=0;x[0]=xR; y[0]=yR; leec(mR,first,last);
    first=0;last=0;x[0]=xJ; y[0]=yJ; leec(mJ,first,last);
    minim=100*100;
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            if(mR[i][j]==mJ[i][j])
                if(mR[i][j]>1)
                    if(mR[i][j]<minim)
                    {

                        minim=mR[i][j];
                        xf=i;
                        yf=j;
                        cout<<xf<<" "<<yf;
                    }
    ofstream out("rj.out");
    out<<minim<<" "<<xf+1<<" "<<yf+1;
    out.close();

    return 0;
}