Cod sursa(job #1393980)

Utilizator YusukeFMI Mares Medar Razvan Yusuke Data 19 martie 2015 21:44:58
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.07 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int R[101][101], J[101][101],lin[]={2,-1,-1,0,+1,+1,+1,0,-1},col[]={2,0,+1,+1,+1,0,-1,-1,-1},qlin[101*101],qcol[101*101],N,M,i,j,lr,cr,lj,cj,minim=9999999,lf,cf;;
void citire(int &N ,int &M, int &lr, int &cr , int &lj , int &cj){
    f >> N >> M;
    f.get();
    for (i = 1; i <= N; i++){
        char c;
        for (j = 1; j <= M; j++){
            f >> noskipws >> c;
            switch(c){
                case 'R':
                    R[i][j] = 1;
                    J[i][j] = -1;
                    lr = i;
                    cr=i;
                    break;
                case 'J':
                    J[i][j] = 1;
                    R[i][j] = -1;
                    lj = i;
                    cj = j;
                    break;
                case 'X':
                    R[i][j] = J[i][j] = -1;
                    break;
                default:
                    R[i][j] = J[i][j] = 0;
                    break;
            }
        }
        f.get();
    }
}
void Lee(int a[101][101], int l, int c){
    int i,j,p,u;
    p=u=0;
    u++;
    qlin[u]=l;
    qcol[u]=c;
    while (p!=u){
        p++;
        if (p==101*101)
            p=1;
        l=qlin[p];
        c=qcol[p];
        for (i=1;i<=8;i++)
        {
            int l1=l+lin[i], c1=c+col[i];
            if (l1>=1 && c1>=1 && l1<=N && c1<=M)
                if (a[l1][c1]==0 || a[l1][c1]>a[l][c]+1)
                {
                    a[l1][c1]=a[l][c]+1;
                    u++;
                    if (u==101*101)
                        u=1;
                    qlin[u]=l1;
                    qcol[u]=c1;
                }
        }
    }
}
int main(){
    citire(N,M,lr,cr,lj,cj);
    Lee(R,lr,cr);
    Lee(J,lj,cj);
    for (i = 1;i <= N; i++)
        for (j = 1;j <= M; j++)
            if (R[i][j] == J[i][j] && R[i][j] > 0 && J[i][j]>0 &&  minim > R[i][j])
                minim = R[i][j],lf=i,cf=j;
    g << minim << " " << lf << " " << cf;
}