Cod sursa(job #1813172)

Utilizator cosceexcosceex cosceex Data 22 noiembrie 2016 19:23:47
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.46 kb
#include <fstream>
using namespace std;

ifstream f("rj.in");
ofstream g("rj.out");

struct poz{
    int l,c;
};

poz c1[10201],c2[10201];
int nrmin;
//poz pozitie;
int n,m,i,j,xfj,yfj,xfr,yfr;

    int dx[8] = { 0, 1, 1, 1, 0, -1, -1, -1 };
    int dy[8] = { 1, 1, 0, -1, -1, -1, 0, 1 };
    int /*a[103][103]*/a[103][103],b[103][103],c[103][103];

void bordare ()
{
    for(i=0;i<=n+1;i++)
    { a[i][0]=-1;
      a[i][n+1]=-1;
    }
    for(j=0;j<=m+1;j++)
    { a[j][0]=-1;
      a[j][m+1]=-1;
    }
}

void lee ()
{
    int inr=1;
    int sfr=1;
    int inj=1;
    int sfj=1;
    c1[1].l=xfr;
    c1[1].c=yfr;
    int currl,currc;
    b[xfr][yfr]=1;
    while(inr<=sfr)
    {
        currl=c1[inr].l;currc=c1[inr].c;
        for(int k=0;k<8;k++)
            if(a[currl+dx[k]][currc+dy[k]]==0&&b[currl+dx[k]][currc+dy[k]]==0)
            {
                b[currl+dx[k]][currc+dy[k]]=b[currl][currc]+1;
                sfr++;
                c1[sfr].l=currl+dx[k];
                c1[sfr].c=currc+dy[k];
            }
        inr++;
    }
    c2[1].l=xfj;
    c2[1].c=yfj;
    c[xfj][yfj]=1;
    //int currl,currc;
    while(inj<=sfj)
    {
        currl=c2[inj].l;currc=c2[inj].c;
        for(int k=0;k<8;k++)
            if(a[currl+dx[k]][currc+dy[k]]==0&&c[currl+dx[k]][currc+dy[k]]==0)
            {
                c[currl+dx[k]][currc+dy[k]]=c[currl][currc]+1;
                sfj++;
                c2[sfj].l=currl+dx[k];
                c2[sfj].c=currc+dy[k];
            }
        inj++;
    }
}

int main()
{

    char x;
    f>>n>>m;
    f>>noskipws>>x;
    i=1;j=1;
    while(f>>noskipws>>x)
    {
        if(x=='\n')
        {
            i++;j=1;
        }
        else
        {
            if(x=='R')
            {
                xfr=i;
                yfr=j;
                a[i][j]=1;
            }
            else
            if(x=='J')
            {
                xfj=i;
                yfj=j;
                a[i][j]=2;
            }
            else
            if(x=='X')
            {
                a[i][j]=-1;
                //a2[i][j]=-1;
            }
            j++;
        }
    }
    bordare();
    lee();
    ///g<<b[xfj][yfj]<<'\n';
    ///g<<c[xfr][yfr];
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
            if(b[i][j]==c[i][j]&&b[i][j]!=0)
                g<<b[i][j]<<" "<<i<<" "<<j;
            //g<<'\n';
    }




    return 0;
}