Cod sursa(job #2216183)

Utilizator stefantagaTaga Stefan stefantaga Data 25 iunie 2018 19:31:10
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.17 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
short int n,m,v[105][105];
char cc,s[105];
struct poz
{
    int x,y;
}st,sf,b,z;
queue <poz> c;
int dl[]={-1,-1,0,1,1,1,0,-1};
int dc[]={0,1,1,1,0,-1,-1,-1};
int i,j,nr;
short int ok[107][107];
int main()
{

    f>>n>>m;
    f.getline(s,105);
    for (i=1;i<=n;i++)
    {
            f.getline(s,105);
            for (j=0;j<m;j++)
            {
                cc=s[j];
                            if (cc=='X')
            {
                v[i][j+1]=ok[i][j+1]=-1;
            }
            else
            if (cc=='R')
            {
                st.x=i;
                st.y=j+1;
            }
            else
            if (cc=='J')
            {
                sf.x=i;
                sf.y=j+1;
            }
            }
    }
    for (i=0;i<=n+1;i++)
    {
        ok[i][m+1]=ok[i][0]=v[i][m+1]=v[i][0]=-1;
    }
    for (i=0;i<=m+1;i++)
    {
        v[n+1][i]=v[0][i]=ok[n+1][i]=ok[0][i]=-1;
    }
    c.push(st);
    v[st.x][st.y]=1;
    while (!c.empty())
    {
        b=c.front();
        c.pop();
        for (i=0;i<8;i++)
        {
            z.x=b.x+dl[i];
            z.y=b.y+dc[i];
            if (v[z.x][z.y]==0)
            {
                v[z.x][z.y]=v[b.x][b.y]+1;
                c.push(z);
            }
        }
    }
    swap(st,sf);
    ok[st.x][st.y]=1;
    c.push(st);
    int mini=1000000000;
    while (!c.empty())
    {
        b=c.front();
        c.pop();
        for (i=0;i<8;i++)
        {
            z.x=b.x+dl[i];
            z.y=b.y+dc[i];
            if (ok[z.x][z.y]==0)
            {
                ok[z.x][z.y]=ok[b.x][b.y]+1;
                c.push(z);
            }
        }
    }
    for (i=1;i<=n;i++)
    {
        for (j=1;j<=m;j++)
        {
            if (v[i][j]==ok[i][j]&&ok[i][j]!=-1&&ok[i][j]!=0)
            {
                if (v[i][j]<mini)
                {
                    mini=v[i][j];
                    z.x=i;
                    z.y=j;
                }
            }
        }
    }
    g<<mini<<" "<<z.x<<" "<<z.y;
    return 0;
}