Cod sursa(job #1125676)

Utilizator stefanlaculeanuLaculeanu Stefan stefanlaculeanu Data 26 februarie 2014 18:57:26
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.82 kb
#include <iostream>
#include <queue>
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
int d[105][105] ;
const int dlin[] = {-1, 0, 1, 0 , 1 , -1 , 1 , -1};
const int dcol[] = {0, -1, 0, 1 , 1 , -1 , -1 , 1};
struct pozitie{
    int lin , col;
};
queue<pozitie>q;
void lee(pozitie x0)
{
    pozitie x,y;
    d[x0.lin][x0.col]=1;
    q.push(x0);
    while(!q.empty())
    {
        x=q.front();
        q.pop();
        for(int i=0;i<8;i++)
        {
            y.lin=x.lin+dlin[i];
            y.col=x.col+dcol[i];
            if((d[y.lin][y.col]==0)||(d[y.lin][y.col]>d[x.lin][x.col]))
            {
                d[y.lin][y.col]=1+d[x.lin][x.col];
                q.push(y);
            }
        }
    }
}

int main()
{
    int i ,j, n,m ;
    in>>n;
    in>>m;
    for(i=0;i<=m+1;i++)
    {
        d[0][i]=-1;
        d[n+1][i]=-1;
    }
    for(i=0;i<=n+1;i++)
    {
        d[i][0]=-1;
        d[i][m+1]=-1;
    }
    char c[105] , ca;
    for(i=0;i<=n;i++)
    {
        in.getline(c,105);
        for(j=1;j<m+1;j++)
        {
            ca=c[j-1];
            if(ca==' ')
                d[i][j]=0;
            if((ca=='R')||(ca=='J'))
                d[i][j]=-2;
            if(ca=='X')
                d[i][j]=-1;
        }
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<m+1;j++)
        {
            if(d[i][j]==-2)
                lee((pozitie){i,j});
        }
    }
    int max=0,poz1,poz2;
    for(i=0;i<=n+1;i++)
    {
        for(j=0;j<=m+1;j++)
        {
            if(d[i][j]>max)
            {
                max=d[i][j];
                poz1=i;
                poz2=j;
            }
        }
    }
    out<<max<<" "<<poz1<<" "<<poz2;
    in.close();
    out.close();
    return 0;
}