Cod sursa(job #852441)

Utilizator monica11Szekely Monica monica11 Data 11 ianuarie 2013 11:48:53
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.96 kb
#include<fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int dx[8]={-1,-1,0,1,1,1,0,-1};
int dy[8]={0,1,1,1,0,-1,-1,-1};
int n,i,j,m,a[101][101],b[101][101],pozi,pozj,min1=1000;
char x;
void citire()
{
    f>>n>>m;
    f.get(x);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            f.get(x);
            if(x=='X')
            {
                b[i][j]=-1;
                a[i][j]=-1;
            }
            else
                if(x=='R')
                {
                    b[i][j]=0;
                    a[i][j]=1000;
                }
                else
                    if(x=='J')
                    {
                        b[i][j]=1000;
                        a[i][j]=0;
                    }
                else
                    if(x==' ')
                    {
                        b[i][j]=1000;
                        a[i][j]=1000;
                    }
        }
        f.get(x);
    }

}
void lee(int c[101][101])
{
    int x,y,xx,yy,i,ok=1;
    while(ok)
    {
        ok=0;
        for(x=1;x<=n;x++)
            for(y=1;y<=m;y++)
            {
                if(c[x][y]==1000||c[x][y]==-1)
                    continue;
                for(i=0;i<8;i++)
                {
                    xx=x+dx[i];
                    yy=y+dy[i];
                    if(c[xx][yy]>c[x][y]+1)
                    {
                        c[xx][yy]=c[x][y]+1;
                        ok=1;
                    }
                }
            }
    }
}
void afisare()
{
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
            if(a[i][j]==b[i][j]&&a[i][j]!=-1&&a[i][j]!=1000&&a[i][j]+1<min1)
            {
                min1=a[i][j]+1;
                pozi=i;
                pozj=j;
            }
    }
                g<<min1<<" "<<pozi<<" "<<pozj;
}
int main()
{
    citire();
    lee(a);
    lee(b);
    afisare();
    return 0;
}