Cod sursa(job #1730058)

Utilizator arabtrappinTudor Bursuc arabtrappin Data 16 iulie 2016 11:50:51
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.77 kb
#include <fstream>
#include <cstring>
#include <climits>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
struct coord{int x,y;};
coord c[100*100];
int a[101][101],b[101][101];
int n,m,xr,yr,xj,yj;
int dx[]={-1,-1,-1,0,0,1,1,1};
int dy[]={-1,0,1,-1,1,-1,0,1};
int interior(int x,int y)
{
    if(x>=1&&x<=n&&y>=1&&y<=m)return 1;
    return 0;

}
void citire()
{
    int i,j;
    char c;
    char s[101];
    fin>>n>>m;
    fin.get();
    for(i=1;i<=n;i++)
    {
        fin.getline(s,101);
        for(j=0;j<=m-1;j++)
            if(s[j]=='R')
        {
            xr=i;
            yr=j+1;
            a[i][j+1]=b[i][j+1]=0;

        }
        else if(s[j]=='J')
        {
            xj=i;
            yj=j+1;
            a[i][j+1]=b[i][j+1]=0;
        }
        else if(s[j]=='X')
        {
            a[i][j+1]=b[i][j+1]=1;
        }
        else
        {
            a[i][j+1]=b[i][j+1]=0;

        }

    }

}

void lee(int a[101][101],int xp,int yp)
{
    int i,j,p,u,xv,yv,x,y;
    p=u=1;
    c[u].x=xp;
    c[u].y=yp;
    a[xp][yp]=1;
    while(p<=u)
    {
        x=c[p].x;
        y=c[p++].y;
        for(i=0;i<=7;i++)
        {
            xv=x+dx[i];
            yv=y+dy[i];
            if(interior(xv,yv)&&a[xv][yv]==0)
            {
                a[xv][yv]=a[x][y]+1;
                c[++u].x=xv;
                c[u].y=yv;
            }

        }
    }

}

int main()
{int i,j,p,q,min;
    citire();
    lee(a,xr,yr);
    lee(b,xj,yj);
    min=INT_MAX;
    for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
        if(a[i][j]==b[i][j]&&a[i][j]<min&&a[i][j]!=0&&a[i][j]!=1)
    {
        min=a[i][j];
        p=i;
        q=j;

    }
    fout<<min<<" "<<p<<" "<<q;


    return 0;
}