Cod sursa(job #1398891)

Utilizator BKmarianmarian BKmarian Data 24 martie 2015 14:00:31
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#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[i][j] = J[i][j] = 0;
                    break;
                case 'R':
                    R[i][j] = 1;J[i][j] = -1;lr = i;cr = j;
                    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;
            }
        }
        f.get();
    }
}
void Lee(int a[101][101], int l, int c){
    int i,j,p,u;
    p = 0;
    u = 1;
    qlin[u] = l;
    qcol[u] = c;
    while (p <= u){
        p++;
        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 && a[l1][c1] == 0 || a[l1][c1] > a[l][c]+1){
                    a[l1][c1] = a[l][c]+1;
                    u++;
                    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;
}