Cod sursa(job #804878)

Utilizator BartieSocaciu Vlad Bartie Data 30 octombrie 2012 16:36:08
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 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]={0},b[101][101]={0};
const int di[8]={1,1,1,0,0,-1,-1,-1},
          dj[8]={1,0,-1,1,-1,1,0,-1};
int ir,jr,ij,jj;

void citire()
{
    fin>>n>>m;
    char c;
    fin.get();
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            fin.get(c);
            if(c=='X')
            {
                a[i][j]=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;
            }
            if(c=='\n')
            j--;
        }
    }
}
void Lee(int a[101][101],int ii,int ij)
{
    unsigned char l[10000],c[10000];
    int dr=0,st=0;
    l[dr]=ii;c[dr]=ij;dr++;
    while(st<dr)
    {
        int i=l[st],j=c[st];
        for(int k=0;k<8;k++)
        {
            int ii=i+di[k],jj=j+dj[k];
            if(ii>0 && ii<=n+1 && jj>0 && jj<=m+1 && a[ii][jj]==0)
            {
                a[ii][jj]=a[i][j]+1;
                l[dr]=ii;c[dr]=jj;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;
    return 0;
}