Cod sursa(job #1333264)

Utilizator alexmisto342Turdean Alexandru alexmisto342 Data 2 februarie 2015 22:43:55
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.15 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 next,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(next.x>0&&next.y>0&&next.x<=n&&next.y<=m&&v[next.x][next.y]==0)
            return true;
        return false;
    }
    bool verifi()
    {
        if(next.x>0&&next.y>0&&next.x<=n&&next.y<=m&&r[next.x][next.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++)
        {

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

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

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

        }
        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;
}