Cod sursa(job #1337726)

Utilizator superstar1998Moldoveanu Vlad superstar1998 Data 9 februarie 2015 13:52:08
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <fstream>
using namespace std;
struct PUNCT {int x, y;};
char h;
int a[101][101],px[8]={-1,-1,-1,0,1,1,1,0},py[8]={0,-1,1,1,0,1,-1,-1},b[101][101],n,m,i,j,x1,y1,x2,y2,q,e,nr,min1=99999;
PUNCT c[10201];
ifstream f("rj.in");
ofstream g("rj.out");
void lee (int x,int y,int z[101][101])
{
    PUNCT v;
    int p,u,i,l1,c1;
    c[1].x=x;c[1].y=y;
    p=u=1;z[x][y]=1;
    while (p<=u)
    {
        v=c[p];
        for (i=0;i<=7;i++)
        {
            l1=v.x+px[i];c1=v.y+py[i];
            if (z[l1][c1]==0)
            {
                z[l1][c1]=z[v.x][v.y]+1;
                u++;
                c[u].x=l1;c[u].y=c1;
            }
        }
        p++;
    }

}
void init (int z[101][101])
{
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
            z[i][j]=0;
    for (i=0;i<=n+1;i++)
        z[i][0]=z[i][m+1]=-1;
    for (i=0;i<=m+1;i++)
        z[0][i]=z[n+1][i]=-1;
}
int main()
{
    f>>n>>m;
    init (a);
    init (b);
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
            {
                f.get(h);
                if(h=='\n'&& j>1) j=m;
                else if (h=='\n') f.get(h);
                if (h=='R') {a[i][j]=1;b[i][j]=0;x1=i;y1=j;}
                    else if (h=='J') {a[i][j]=0;b[i][j]=1;x2=i;y2=j;}
                        else if (h=='X') a[i][j]=b[i][j]=-1;
            }
    lee (x1,y1,a);
    lee (x2,y2,b);
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
            if (a[j][i]==b[j][i] && a[j][i]!=-1 && min1>a[i][j])
                {q=j;e=i;}
    g<<a[q][e]<<" "<<q<<" "<<e;
    f.close();
    g.close();
    return 0;
}