Cod sursa(job #1611296)

Utilizator BicuDanBicu Daniel BicuDan Data 24 februarie 2016 00:03:45
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.01 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
struct poz
{
    int x;
    int y;
};
poz z,z1,z2,zf,zj;
queue<poz>coad;
int a[105][105],n,m,ji[105][105],rez[105][105];
char s[201];
int dx[]= {-1,-1,-1,0,1,1,1,0};
int dy[]= {-1,0,1,1,1,0,-1,-1};
void incep()
{
    int i,j;
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
        {
            if(s[j-1]=='R')
            {
                z.x=i;
                z.y=j;
                zf=z;
            }
            if(s[j-1]=='J')
            {
                z.x=i;
                z.y=j;
                zj=z;
            }
            if(s[j-1]=='X')
                a[i][j]=-1;
        }
    }
    for(i=0; i<=n+1; i++)
        a[i][0]=a[i][m+1]=-1;
    for(i=0; i<=m+1; i++)
        a[0][i]=a[n+1][0]=-1;
}
void rezolvlee(int x,int y,int b[101][101])
{
    int k;
    b[x][y]=1;
    z.x=x;
    z.y=y;
    coad.push(z);
    while(!coad.empty())
    {
        z1=coad.front();
        coad.pop();
        for(k=0; k<8; k++)
        {
            z2.x=z1.x+dx[k];
            z2.y=z1.y+dy[k];
            if(!a[z2.x][z2.y] && !b[z2.x][z2.y])
            {
                b[z2.x][z2.y]=b[z1.x][z1.y]+1;
                coad.push(z2);
            }
        }
    }
}

void finish()
{
    int i,k,mini=11000;
    z.x=-1,z.y=-1;
    for(i=1; i<=n; i++)
        for(k=1; k<=m; k++)
            if(rez[i][k]==ji[i][k] && rez[i][k])
                if(rez[i][k]<mini)
                {
                    mini=rez[i][k];
                    z.x=i;
                    z.y=k;
                }
    fout<<mini<<' '<<z.x<<' '<<z.y<<'\n';
}


int main()
{
    char s[201];
    int i,j;
    fin>>n>>m;
    fin.get();
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
            fin.getline(s,201);
    }
    rezolvlee(zf.x,zf.y,rez);
    rezolvlee(zj.x,zj.y,ji);
    finish();

    return 0;
}