Cod sursa(job #702647)

Utilizator DumitracheIulianDumitrache Iulian DumitracheIulian Data 2 martie 2012 01:45:45
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.2 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;

ifstream in ("rj.in");
ofstream out("rj.out");
const int N=105;
const short int dlin[]={-1,-1,0,1,1,1,0,-1};
const short int dcol[]={0,1,1,1,0,-1,-1,-1};
struct punct{short int lin,col; int pas;};
short int r[N][N],j[N][N];
char comun[N][N];
int n,m;

void plecari (int x, int y)
{
    if(comun[x][y]==' ')
        return;
    if(comun[x][y]=='R')
        {r[0][0]=x;r[1][0]=y;}
    if(comun[x][y]=='J')
        {j[0][0]=x;j[1][0]=y;}
}
void citire ()
{
    in>>n>>m;
    for(int i=1;i<=n;i++)
    {
        comun[i][1]=in.get();
        for(int j=1;j<=m;j++)
        {
            comun[i][j]=in.get();
            plecari(i,j);
        }
    }
}
bool bun (punct x)
{
    if((1<=x.lin)&&(x.lin<=n))
        if((1<=x.col)&&(x.col<=m))
            if(comun[x.lin][x.col]!='X')
                    return true;
    return false;
}
void lee (short int mat[][N])
{
    queue <punct> coada;
    punct start;
    start.lin=mat[0][0];
    start.col=mat[1][0];
    start.pas=1;
    coada.push (start);
    while(!coada.empty())
    {
        punct temp;
        temp=coada.front();
        coada.pop();
        if((bun(temp))&&(mat[temp.lin][temp.col]==0))
        {
            mat[temp.lin][temp.col]=temp.pas;
            for(int i=0;i<8;i++)
            {
                punct baga;
                baga.lin=temp.lin+dlin[i];
                baga.col=temp.col+dcol[i];
                baga.pas=temp.pas+1;
                coada.push (baga);
            }
        }
    }
}
void cauta ()
{
    int linmini,colmini,mini=N*N;
    for(int a=1;a<=n;a++)
        for(int b=1;b<=m;b++)
            if(r[a][b]==j[a][b])
                if((r[a][b]<mini)&&(r[a][b]!=0))
                {
                    mini=r[a][b];
                    linmini=a;
                    colmini=b;
                }
    out<<mini<<" "<<linmini<<" "<<colmini<<"\n";
}
void afis ()
{
    for(int a=1;a<=n;a++)
    {
        for(int b=1;b<=m;b++)
            out<<j[a][b];
        out<<"\n";
    }
}
int main ()
{
    citire();
    lee(r);
    lee(j);
    //afis();
    cauta();
    return 0;
}