Cod sursa(job #1130052)

Utilizator TerraMGMihai Gurau TerraMG Data 28 februarie 2014 11:01:49
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.27 kb
#include <fstream>
#include <cstring>

using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
struct coada {int l,c;} C[10001],r,j,b,p;
int a[101][101],n,m,prim,ultim,i,k;
char v[101];
int main()
{
    f>>n>>m;
    for (i=1; i<=n; i++)
        {f.get();
        f.get(v,101);
        for (k=0; k<=m; k++)
            {
                switch(v[k]){
                case ' ': {a[i][k+1]=1; break;}
                case 'R': {r.l=i; r.c=k+1; a[i][k+1]=2; break;}
                case 'J': {j.l=i; j.c=k+1; a[i][k+1]=2; break;}}
            }
        }
        /*for (i=1; i<=n; i++) {
            for (k=1; k<=m; k++) {g<<a[i][k]<<" ";} g<<'\n';}*/
    prim=ultim=0;
    int dl[]={-1,-1,0,1,1,1,0,-1};
    int dc[]={0,1,1,1,0,-1,-1,-1};
    C[0].l=r.l; C[0].c=r.c;
    while (prim<=ultim)
        {
            p=C[prim++];
            for (i=0; i<=7; i++)
            {
                b.l=p.l+dl[i];
                b.c=p.c+dc[i];
                if (a[b.l][b.c]==1)
                    {
                        a[b.l][b.c]=a[p.l][p.c]+1;
                    C[++ultim]=b;
                    }
            }
        }
            prim=ultim=0;
            C[0].l=j.l; C[0].c=j.c;
            while (prim<=ultim)
        {
            p=C[prim++];
            for (i=0; i<=7; i++)
            {
                b.l=p.l+dl[i];
                b.c=p.c+dc[i];
                if (a[b.l][b.c]>a[p.l][p.c]+1||a[b.l][b.c]==1)
                    {
                        a[b.l][b.c]=a[p.l][p.c]+1;
                    C[++ultim]=b;
                    }
                    else if (a[b.l][b.c]==a[p.l][p.c]+1)
                    {
                        g<<a[b.l][b.c]-1<<" "<<b.l<<" "<<b.c;
                        break;
                    }
            }
        }
            /*for (i=1; i<=n; i++) {
            for (k=1; k<=m; k++) {g<<a[i][k]<<" ";} g<<'\n';}*/
            /*for (i=prim1; i<=ultim1; i++)
                for (j=prim2; j<=ultim2; j++)
                    {
                        if (R[i].l==J[i].l && R.[i].c==R[i].c)
                            {
                                g<<R[i].l<<" "<<R[i].c<<" "<<a[R[i].l][R[i].c]; break;
                            }
                    }
        }*/

    return 0;
}