Cod sursa(job #2245638)

Utilizator sracasanuRacasanu Stefan Sorin sracasanu Data 25 septembrie 2018 17:44:10
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.99 kb
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int r[105][105]= {{0},{0}},ju[105][105]= {{0},{0}},m,n,mn=100000,i,j,p=0,u=0,lin,col,x,romlin,romcol,jullin,julcol;
char a;
struct
coada
{
    int lin,col;
} c[11025];
int main()
{
    f>>m>>n;
    for(i=1; i<=m; i++)
       {
        f>>noskipws>>a;
        for(j=1; j<=n; j++)
        {
            f>>noskipws>>a;
            if(a=='X')r[i][j]=ju[i][j]=-1;
            else if(a=='R')r[i][j]=1,romlin=i,romcol=j;
            else if(a=='J')ju[i][j]=1,jullin=i,julcol=j;
            else r[i][j]=ju[i][j]=0;
        }
        }
    for(i=0; i<=m+1; i++)
    {
        r[i][0]=ju[i][0]=-1;
        r[i][n+1]=ju[i][n+1]=-1;
    }
    for(j=0; j<=n+1; j++)
    {
        r[0][j]=ju[0][j]=-1;
        r[m+1][j]=ju[m+1][j]=-1;
    }
    c[0].lin=romlin;
    c[0].col=romcol;

    while(p<=u)
    {
        lin=c[p].lin;
        col=c[p].col;
        x=r[lin][col];
        if(r[lin-1][col]==0)
        {
            r[lin-1][col]=x+1;
            u++;
            c[u].lin=lin-1;
            c[u].col=col;
        }
        if(r[lin][col+1]==0)
        {
            r[lin][col+1]=x+1;
            u++;
            c[u].lin=lin;
            c[u].col=col+1;
        }
        if(r[lin+1][col]==0)
        {
            r[lin+1][col]=x+1;
            u++;
            c[u].lin=lin+1;
            c[u].col=col;
        }
        if(r[lin][col-1]==0)
        {
            r[lin][col-1]=x+1;
            u++;
            c[u].lin=lin;
            c[u].col=col-1;
        }
        if(r[lin-1][col+1]==0)
        {
            r[lin-1][col+1]=x+1;
            u++;
            c[u].lin=lin-1;
            c[u].col=col+1;
        }
        if(r[lin+1][col+1]==0)
        {
            r[lin+1][col+1]=x+1;
            u++;
            c[u].lin=lin+1;
            c[u].col=col+1;
        }
        if(r[lin+1][col-1]==0)
        {
            r[lin+1][col-1]=x+1;
            u++;
            c[u].lin=lin+1;
            c[u].col=col-1;
        }
        if(r[lin-1][col-1]==0)
        {
            r[lin-1][col-1]=x+1;
            u++;
            c[u].lin=lin-1;
            c[u].col=col-1;
        }


        p++;
    }
    p=0;
    u=0;
    c[0].lin=jullin;
    c[0].col=julcol;
    while(p<=u)
    {
        lin=c[p].lin;
        col=c[p].col;
        x=ju[lin][col];
        if(ju[lin-1][col]==0)
        {
            ju[lin-1][col]=x+1;
            u++;
            c[u].lin=lin-1;
            c[u].col=col;
        }
        if(ju[lin][col+1]==0)
        {
            ju[lin][col+1]=x+1;
            u++;
            c[0].lin=jullin;
            c[u].lin=lin;
            c[u].col=col+1;
        }
        if(ju[lin+1][col]==0)
        {
            ju[lin+1][col]=x+1;
            u++;
            c[u].lin=lin+1;
            c[u].col=col;
        }
        if(ju[lin][col-1]==0)
        {
            ju[lin][col-1]=x+1;
            u++;
            c[u].lin=lin;
            c[u].col=col-1;
        }
        if(ju[lin-1][col+1]==0)
        {
            ju[lin-1][col+1]=x+1;
            u++;
            c[u].lin=lin-1;
            c[u].col=col+1;
        }
        if(ju[lin+1][col+1]==0)
        {
            ju[lin+1][col+1]=x+1;
            u++;
            c[u].lin=lin+1;
            c[u].col=col+1;
        }
        if(ju[lin+1][col-1]==0)
        {
            ju[lin+1][col-1]=x+1;
            u++;
            c[u].lin=lin+1;
            c[u].col=col-1;
        }
        if(ju[lin-1][col-1]==0)
        {
            ju[lin-1][col-1]=x+1;
            u++;
            c[u].lin=lin-1;
            c[u].col=col-1;
        }
        p++;
    }
    for(i=1; i<=m; i++)
        for(j=1; j<=n; j++)
        {
            p=r[i][j];
            if(p==ju[i][j]&&p>0&&p<mn)lin=i,col=j,mn=p;
        }
    g<<mn<<' '<<lin<<' '<<col;
    f.close();
    g.close();
}