Cod sursa(job #808344)

Utilizator BogdySSSzekely Bogdan BogdySS Data 6 noiembrie 2012 17:31:36
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.82 kb
#include<iostream>
#include<fstream>
#include<climits>
#include<iomanip>
using namespace std;

ifstream fin ("rj.in");
ofstream fout("rj.out");

int n, m, a[101][101], b[101][101];
int ir, jr, ij, jj;
const int di[8]={1,1,1,0,0,-1,-1,-1},
          dj[8]={1,0,-1,1,-1,1,0,-1};

void citire()
{
    fin >> n >> m;
    fin.get();
    char c;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            fin.get(c);
            if(c=='X')
            {
                a[i][j]=-1;b[i][j]=-1;
            }
            if(c=='R')
                {
                    ir=i;jr=j;
                    a[i][j]=1;
                }
            if(c=='J')
                {
                    ij=i;jj=j;
                    b[i][j]=1;
                }
        }
        fin.get();
    }
}

void Lee(int a[101][101], int ii, int ji)
{
    unsigned char l[10005], c[10005];
    int st=0, dr=0;

    l[dr]=ii;c[dr]=ji;
    dr++;
    while(st<dr)
    {
        int i=l[st], j=c[st];
        for(int k=0;k<8;k++)
        {
            int i1, j1;
            i1=i+di[k]; j1=j+dj[k];
            if(i1>0 && i1<n+1 && j1>0 && j1<m+1 && a[i1][j1]==0)
            {
                a[i1][j1]=a[i][j]+1;
                l[dr]=i1;c[dr]=j1;
                dr++;
            }
        }
        st++;
    }
}

int main()
{
    citire();

    Lee(a, ir, jr);
    Lee(b, ij, jj);
    int vmin = INT_MAX;
    int ii=0, jj=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(a[i][j] == b[i][j] && a[i][j] > 0 && a[i][j] < vmin)
                {
                    vmin = a[i][j];
                    ii = i;
                    jj = j;
                }

    fout << vmin << " " << ii << " " << jj;

    fin.close();
    fout.close();
    return 0;
}