Cod sursa(job #902390)

Utilizator crisbodnarCristian Bodnar crisbodnar Data 1 martie 2013 13:57:02
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.32 kb
#include <iostream>
#include <fstream>
#include <iomanip>
#include <climits>

#define MAX 101

using namespace std;

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

int n, m, a[MAX][MAX];
int x, y, i2, j2;
const int di[]={0, 1, 0, -1, -1, 1, -1, 1},
          dj[]={1, 0, -1, 0, -1, 1,  1,-1};

int rom[MAX][MAX], jul[MAX][MAX];

void Afisare();
void Citire();
void Lee1(int istart, int jstart)
{
    int l[10500], c[10500];
    int st=1, dr=1;
    l[dr]=istart;
    c[dr]=jstart;
    rom[istart][jstart]=1;
    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 && jj>0 && jj<=m && a[ii][jj]==0 && rom[ii][jj]==0)
            {
                dr++;
                l[dr]=ii, c[dr]=jj;
                rom[ii][jj]=rom[i][j]+1;
            }
        }
        st++;
    }
}

void Lee2(int istart, int jstart)
{
    int l[10500], c[10500];
    int st=1, dr=1;
    l[dr]=istart;
    c[dr]=jstart;
    jul[istart][jstart]=1;
    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 && jj>0 && jj<=m && a[ii][jj]==0 && jul[ii][jj]==0)
            {
                dr++;
                l[dr]=ii, c[dr]=jj;
                jul[ii][jj]=jul[i][j]+1;
            }
        }
        st++;
    }
}

int main()
{
    Citire();
    Lee1(x, y);
    Lee2(i2, j2);
    int min=INT_MAX;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(rom[i][j]==jul[i][j] && rom[i][j]!=0 && jul[i][j]!=0)
                if(min>rom[i][j])
                    min=rom[i][j], x=i, y=j;
    fout<<rom[x][y]<<" "<<x<<" "<<y;
    return 0;
}

void Citire()
{
    char p;
    fin>>n>>m;
    fin.get();
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            p=fin.get();
            if(p=='X')
                a[i][j]=-1;
            else
                if(p==' ')
                    a[i][j]=0;
                else
                    if(p=='R')
                    a[i][j]=-2, x=i, y=j;
                    else
                        if(p=='J')
                        a[i][j]=-3, i2=i, j2=j;
        }
        fin.get();
    }


}