Cod sursa(job #1370445)

Utilizator GinguIonutGinguIonut GinguIonut Data 3 martie 2015 14:42:09
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.15 kb
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
const int dx[]={0,1,0,-1,1,1,-1,-1};
const int dy[]={1,0,-1,0,1,-1,1,-1};
int a[101][101],b[101][101],i,j,Min,n,m,l,c,l1,c1,l2,c2,x,y,p,u,q[2][10100],sollin,solcol;
char x1,vect[1001];
int main()
{
    sollin=solcol=Min=1500;
fin>>n>>m;
fin.get();
for(i=1;i<=n;i++)
{
    fin.getline(vect,1000);
    for(j=0;j<m;j++)
    {
        if(vect[j]=='R')
        {
            l1=i;
            c1=j+1;
            a[i][j+1]=1;
            b[i][j+1]=1;
        }
        if(vect[j]=='J')
        {
            l2=i;
            c2=j+1;
             a[i][j+1]=1;
             b[i][j+1]=1;
        }
        if(vect[j]=='X')
        {
            a[i][j+1]=-1;
            b[i][j+1]=-1;
        }
    }
}
u=p=1;
q[0][1]=l1;
q[1][1]=c1;
while(p<=u)
{
    x=q[0][p];
    y=q[1][p];
    for(i=1;i<=7;i++)
    {
        l=x+dx[i];
        c=y+dy[i];
        if(a[l][c]==0&&l>=1&&l<=n&&c>=1&&c<=m)
        {
            a[l][c]=a[x][y]+1;
            q[0][++u]=l;
            q[1][u]=c;
        }
    }
    p++;
}
u=p=1;
q[0][1]=l2;
q[1][1]=c2;
while(p<=u)
{
    x=q[0][p];
    y=q[1][p];
    for(i=1;i<=7;i++)
    {
        l=x+dx[i];
        c=y+dy[i];
        if(b[l][c]==0&&l>=1&&l<=n&&c>=1&&c<=m)
        {
            b[l][c]=b[x][y]+1;
            q[0][++u]=l;
            q[1][u]=c;
            if(b[l][c]==a[l][c])
                if(b[l][c]<=Min)
                {
                    if(b[l][c]==Min)
                    {
                        if(l==sollin)
                            if(c<solcol)
                                solcol=c;
                        if(l<sollin)
                        {
                            sollin=l;
                            solcol=c;
                        }
                    }
                    if(b[l][c]<Min)
                    {
                        Min=b[l][c];
                        sollin=l;
                        solcol=c;
                    }

                }
        }
    }
    p++;
}
fout<<Min<<" "<<sollin<<" "<<solcol;
    return 0;
}