Cod sursa(job #1259521)

Utilizator Eman98Ghinea Mihail Emanuel Eman98 Data 10 noiembrie 2014 09:29:44
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.82 kb
#include<fstream>
#include<cstring>
using namespace std;
ifstream cin("rj.in");
ofstream cout("rj.out");
char ch[1000];
int a[103][103],b[103][103],q[2][10202],m,n,i,j,l,c,p,u,xr,xj,yr,yj,Min=10001,x,y;
int dx[]={-1, -1, 0, 1, 1, 1, 0, -1},dy[]={0, 1, 1, 1, 0, -1, -1, -1};
int main()
{
    cin>>n>>m;
    cin.get();
    for(i=1;i<=n;i++){
        cin.getline(ch,1000);
        for(j=0;j<m;j++)
        {

            if(ch[j]=='R')
                xr=i,yr=j+1;
            else
            if(ch[j]=='J')
                xj=i,yj=j+1;
            else
            if(ch[j]=='X')
                b[i][j+1]=a[i][j+1]=-1;
        }
    }
    for(i=0;i<=n+1;i++)
        b[i][m+1]=b[i][0]=a[i][m+1]=a[i][0]=-1;
    for(i=0;i<=m+1;i++)
        b[0][i]=b[n+1][i]=a[0][i]=a[n+1][i]=-1;
    p=u=1;
    q[0][p]=xr;
    q[1][p]=yr;
    a[xr][yr]=1;
    while(p<=u){
        for(i=0;i<=7;i++)
        {
            l=q[0][p]+dx[i];
            c=q[1][p]+dy[i];
            if(a[l][c]==0)
            {
                u++;
                q[0][u]=l;
                q[1][u]=c;
                a[l][c]=a[q[0][p]][q[1][p]]+1;
            }
        }
        p++;
    }
    p=u=1;
    q[0][p]=xj;
    q[1][p]=yj;
    b[xj][yj]=1;
    while(p<=u){
        for(i=0;i<=7;i++)
        {
            l=q[0][p]+dx[i];
            c=q[1][p]+dy[i];
            if(b[l][c]==0)
            {
                u++;
                q[0][u]=l;
                q[1][u]=c;
                b[l][c]=b[q[0][p]][q[1][p]]+1;
            }
        }
        p++;
    }
    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];
                    x=i;y=j;
            }
        }
    cout<<Min<<" "<<x<<" "<<y;
}