Cod sursa(job #1379008)

Utilizator AcuasPopescu Nicolae-Aurelian Acuas Data 6 martie 2015 15:38:55
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.17 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#define Nmax 102
#define NrDir 8
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n,m,i,j,a[Nmax][Nmax],ultim1,ultim2,prim1,prim2,b[Nmax][Nmax],k,drummin=100005;
char x[Nmax];
const int dl[] = {-1, 0, 1, -1 , -1, 0, 1, 1};
const int dc[] = {-1, -1, -1, 0, 1, 1 ,1 ,0};
struct Pozitie{
    int lin,col;
}pj,p,v,C1[Nmax*Nmax],C2[Nmax*Nmax];
void citeste(){
    f>>n>>m;
    f.get();
    for(i=1;i<=n;i++){
        f.getline(x,Nmax+2);
        for(j=1;j<=m;j++){
            if(x[j-1] == 'X')
                a[i][j] = -1, b[i][j] = -1;
            else
                if(x[j-1] == 'R')
                    C1[0].lin = i, C1[0].col = j,  a[i][j] = 1;
            else
                if(x[j-1] == 'J')
                    C2[0].lin = i, C2[0].col = j, b[i][j] = 1;
            else
                if(x[j-1] == ' ')
                    a[i][j] = 0, b[i][j] = 0;
        }
    }
}
void bordare(){
    for(i=0;i<=m+1;i++)
        a[0][i]=a[n+1][i]=b[0][i]=b[n+1][i]=-1;
    for(i=0;i<=n+1;i++)
        a[i][0]=a[i][m+1]=b[i][0]=b[i][m+1]=-1;
}
int main()
{
    citeste();
    bordare();
    while(prim1<=ultim1){
        p=C1[prim1];
        for(k=0;k<NrDir;k++){
            v.lin=p.lin+dl[k];
            v.col=p.col+dc[k];
            if(a[v.lin][v.col]==0){
                a[v.lin][v.col]=a[p.lin][p.col]+1;
                ultim1++;
                C1[ultim1]=v;
            }
        }
        prim1++;
    }
    prim2=ultim2=0;
    while(prim2 <= ultim2)
    {
        p=C2[prim2];
        for( k = 0; k < 8; k ++)
        {
            v.lin = p.lin + dl[k], v.col = p.col + dc[k];
            if(b[v.lin][v.col] == 0 )
            {
                b[v.lin][v.col] = b[p.lin][p.col] + 1;
                ultim2++;
                C2[ultim2]=v;
            }
        }
        prim2++;
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++)
            if(a[i][j]==b[i][j]&&a[i][j]>0){
                if(drummin>a[i][j])
                    drummin=a[i][j],pj.lin=i,pj.col=j;

            }
    }
    g<<drummin<<' '<<pj.lin<<' '<<pj.col;
    return 0;
}