Cod sursa(job #922248)

Utilizator timicsIoana Tamas timics Data 21 martie 2013 23:46:06
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
#include<fstream>
using namespace std;
string c;
int N,M,a[110][110],ql[12100],qc[12100],jl,jc,rl,rc,ok=0,ret1,ret2;
int dx[]={0,0,1,1,1,-1,-1,-1};
int dy[]={1,-1,1,0,-1,1,0,-1};
int main()
{
    ifstream fin("rj.in");
    ofstream fout("rj.out");
    fin>>N>>M;
    c=fin.get();
    for(int i=1;i<=N;++i)
    {
        getline(fin,c);
        for(int j=0;j<=M-1;++j)
        {
            if(c[j]=='X')
            {
                a[i][j+1]=-1;
            }
            if(c[j]=='J')
            {
                jl=i;
                jc=j+1;
            }
            if(c[j]=='R')
            {
                rl=i;
                rc=j+1;
            }
        }
    }
    int first=0;
    int last=0;
    a[jl][jc]=1;
    ql[0]=jl;
    qc[0]=jc;

    while(a[rl][rc]==0)
    {
        for(int k=0;k<=7;++k)
            if(ql[first]+dx[k]>=1 && ql[first]+dx[k]<=N && qc[first]+dy[k]>=1 && qc[first]+dy[k]<=N)
                if(a[ql[first]+dx[k]][qc[first]+dy[k]]==0)
                {
                    a[ql[first]+dx[k]][qc[first]+dy[k]]=a[ql[first]][qc[first]]+1;
                    ++last;
                    ql[last]=ql[first]+dx[k];
                    qc[last]=qc[first]+dy[k];
                }
        ++first;
    }

    int i;
    int j;
    for(j=1;j<=M;++j)
    {
        for(i=1;i<=N;++i)
        {
            if(a[i][j]==(a[rl][rc]+1)/2)
            {
                ret1=i;
                ret2=j;
                ok=1;
                break;
            }
        }
        if(ok==1)
            break;
    }
    fout<<(a[rl][rc]+1)/2<<" "<<ret1<<" "<<ret2;
    return 0;
}