Cod sursa(job #1020903)

Utilizator sebinechitasebi nechita sebinechita Data 2 noiembrie 2013 20:18:38
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.75 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
#include <climits>
#include <algorithm>
#include <cmath>
#include <queue>
#include <deque>
#include <iomanip>
#include <stack>
#include <cstdio>

using namespace std;

ifstream fin("rj.in");
FILE *fout=fopen("rj.out", "w");

#define baza 10
#define MAX 102
#define MOD 104659

typedef long long int lli;

queue <pair <int, int> > coada;

int a[MAX][MAX], n, i, b[MAX][MAX], m, j, i2[3], j2[3], min1 , x, y, d;
char c[MAX][MAX];

int poz[8][2]={ {-1,-1}, {-1,0}, {-1,1}, {0,-1}, {0,1}, {1,-1}, {1,0}, {1,1} };

void lee()
{
    for(i=1;i<=2;i++)
    {
        coada.push(make_pair(i2[i], j2[i]));
        a[i2[i]][j2[i]]=1;

        while(!coada.empty())
        {
            x=coada.front().first;
            y=coada.front().second;
            coada.pop();
            for(j=0;j<8;j++)
            {
                if(!a[x+poz[j][0]][y+poz[j][1]])
                {
                    a[x+poz[j][0]][y+poz[j][1]]=a[x][y]+1;
                    coada.push(make_pair(x+poz[j][0], y+poz[j][1]));
                }
            }
        }

        if(i==1)
        {
            for(d=1;d<=n;d++)
            {
                for(j=1;j<=m;j++)
                {
                    b[d][j]=a[d][j];
                    a[d][j]=min(a[d][j],0);
                }
            }
        }
    }
}

int main()
{
    fin>>n>>m;
    fin.get(c[0][0]);
    for(i=1;i<=n;i++)
    {
        fin.getline(c[i]+1,m+1);
    }
    for(i=1;i<=n;i++)
    {

        for(j=1;j<=m;j++)
        {

            if(c[i][j]=='R')
            {
                i2[1]=i;
                j2[1]=j;
            }
            else if(c[i][j]=='J')
            {
                i2[2]=i;
                j2[2]=j;
            }
            else if(c[i][j]=='X')
            {
                a[i][j]=b[i][j]=-1;
            }
            else
                c[i][j]=' ';

        }
        c[i][m+1]=0;
    }
    for(i=0;i<=n+1;i++)
    {
        a[i][m+1]=a[i][0]=b[i][m+1]=b[i][0]=-1;
    }
    for(i=0;i<=m+1;i++)
    {
        a[0][i]=a[n+1][i]=b[0][i]=b[n+1][i]=-1;
    }
    lee();
    min1=n*m;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(a[i][j]==b[i][j] && a[i][j]>0)
            {
                if(a[i][j]<min1)
                    min1=a[i][j];
            }
        }
    }

    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(a[i][j]==b[i][j])
            {
                if(a[i][j]==min1)
                    {
                        fprintf(fout, "%d %d %d\n", a[i][j], i, j);
                    }
            }
        }
    }
    return 0;
}