Cod sursa(job #1135488)

Utilizator BaTDucKMocanu George BaTDucK Data 7 martie 2014 22:05:52
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.69 kb
#include<stdio.h>
#include<queue>
#include<utility>
using namespace std;
int matj[150][150],matr[150][150];
const int vert[8]={-1,0,1,0,-1,1,1,-1};
const int oriz[8]={0,1,0,-1,-1,1,-1,1};
void lee(int x, int y, int mat[150][150])
{
    int i;
    mat[x][y]=1;
    pair < int, int > coord;
    queue < pair < int, int > > coada;
    coada.push(make_pair(x,y));
    while(!coada.empty()){
        for(i=0;i<8;++i){
            coord=make_pair(coada.front().first+vert[i],coada.front().second+oriz[i]);
            if(!mat[coord.first][coord.second]){
            coada.push(coord);
            mat[coord.first][coord.second]=mat[coada.front().first][coada.front().second]+1;
            }
        }
        coada.pop();
    }
}
int main()
{
    int i,j,n,m;char sir[110];
    pair < int, int > ro,ju;
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    scanf("%d %d\n",&m,&n);
    for(i=1;i<=m;++i){
        gets(sir);
        for(j=0;j<=n;++j){
            if(sir[j]=='X') matr[i][j+1]=matj[i][j+1]=-1;
            else if(sir[j]=='R') ro=make_pair(i,j+1);
            else if(sir[j]=='J') ju=make_pair(i,j+1);
        }
    }
    for(i=0;i<=m+1;i++)
        matr[i][0]=matr[i][n+1]=matj[i][0]=matj[i][n+1]=-1;
    for(i=0;i<=n+1;i++)
        matr[0][i]=matj[0][i]=matj[m+1][i]=matr[m+1][i]=-1;
    lee(ro.first,ro.second,matr);
    lee(ju.first,ju.second,matj);
    int indi,indj,minim=2000000;
    for(i=1;i<=m;++i)
        for(j=1;j<=n;++j)
    if(matj[i][j]==matr[i][j] && matj[i][j]>0&& matj[i][j]<minim){
        minim=matj[i][j];
        indi=i;indj=j;
    }
    printf("%d %d %d",minim,indi,indj);
    fclose(stdin);fclose(stdout);
    return 0;
}