Cod sursa(job #1333269)

Utilizator alexmisto342Turdean Alexandru alexmisto342 Data 2 februarie 2015 22:45:03
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.13 kb
#include <fstream>
#include <queue>
#define x first
#define y second
#define now q.front()
#define punct pair<int,int>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");

punct nxt,start,stop;
queue <punct> q;
int i,j,v[102][102],r[102][102],n,m,a,b,ok,c,mini=10000;
char z[106];
const int dx[]={0,1,0,-1,1,1,-1,-1},dy[]={1,0,-1,0,1,-1,1,-1};
bool verif()
    {
        if(nxt.x>0&&nxt.y>0&&nxt.x<=n&&nxt.y<=m&&v[nxt.x][nxt.y]==0)
            return true;
        return false;
    }
    bool verifi()
    {
        if(nxt.x>0&&nxt.y>0&&nxt.x<=n&&nxt.y<=m&&r[nxt.x][nxt.y]==0)
            return true;
        return false;
    }


int main()
{

    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        fin.get();
        fin.get(z+1,m+1);
        for(j=1;j<=m;j++)
            {
                if(z[j]=='J')
                    start=make_pair(i,j);
                if(z[j]=='R')
                    stop=make_pair(i,j);
                if(z[j]=='X')
                   {
                       v[i][j]=-1;
                       r[i][j]=-1;
                   }
            }

    }
    q.push(start);
    while(!q.empty())
    {
        for(a=0;a<8;a++)
        {

                nxt.x=now.x+dx[a];
                nxt.y=now.y+dy[a];
                if(verif())
                {
                    v[nxt.x][nxt.y]=v[now.x][now.y]+1;
                    q.push(nxt);
                }

        }
        q.pop();
    }
    q.push(stop);
     while(!q.empty())
    {
        for(a=0;a<8;a++)
        {

                nxt.x=now.x+dx[a];
                nxt.y=now.y+dy[a];
                if(verifi())
                {
                    r[nxt.x][nxt.y]=r[now.x][now.y]+1;
                    q.push(nxt);
                }

        }
        q.pop();
    }
    a=0;
    for(i=1;i<=n&&a==0;i++)
        for(j=1;j<=m;j++)
            if(v[i][j]==r[i][j]&&v[i][j]>0&&v[i][j]<mini)
            {
                mini=v[i][j];
                b=i;
                c=j;
                }
                fout<<mini+1<<" "<<b<<" "<<c;

    fout.close();
    return 0;
}