Cod sursa(job #1805174)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 13 noiembrie 2016 15:24:59
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.32 kb
#include <fstream>
#include <cstring>
#define DIM 101
using namespace std;
int n,m,i,j,i1,j1,i2,j2,ic,jc,iv,jv,minim,d,p,u,poz1,poz2;
int a[DIM][DIM],b[DIM][DIM],c[2][DIM*DIM];
int di[] = {-1,-1,-1, 0,0, 1,1,1};
int dj[] = {-1, 0, 1,-1,1,-1,0,1};
char x[101];
ifstream fin ("rj.in");
ofstream fout ("rj.out");
int main (){

    fin>>n>>m;
    for (i=0;i<=n;i++){
        fin.getline(x,101);
        for (j=0;j<strlen(x);j++){
            //fin>>x;
            if (x[j] == 'R'){
                i1 = i;
                j1 = j+1;
            }
            if (x[j] == 'J'){
                i2 = i;
                j2 = j+1;
            }
            if (x[j] == 'X'){
                a[i][j+1] = -1;
                b[i][j+1] = -1;
            }
        }
    }
    c[0][1] = i1;
    c[1][1] = j1;
    a[i1][j1] = 1;
    p = 1; u = 1;
    while (p<=u){
        ic = c[0][p];
        jc = c[1][p];
        for (d=0;d<=7;d++){
            iv = ic + di[d];
            jv = jc + dj[d];
            if (iv>=1&&iv<=n&&jv>=1&&jv<=m&&a[iv][jv]==0){
                u++;
                c[0][u] = iv;
                c[1][u] = jv;
                a[iv][jv] = 1+a[ic][jc];
            }
        }
        p++;
    }
    // lee din i2 j2
    c[0][1] = i2;
    c[1][1] = j2;
    p = 1; u = 1;
    b[i2][j2] = 1;
    minim = 2000000000;
    while (p<=u){
        ic = c[0][p];
        jc = c[1][p];
        for (d=0;d<=7;d++){
            iv = ic + di[d];
            jv = jc + dj[d];
            if (iv>=1&&iv<=n&&jv>=1&&jv<=m&&b[iv][jv]==0){
                u++;
                c[0][u] = iv;
                c[1][u] = jv;
                b[iv][jv] = 1+b[ic][jc];
                /*if (b[iv][jv] == a[iv][jv]){
                    if (a[iv][jv] < minim){
                        minim = a[iv][jv];
                        poz1 = iv;
                        poz2 = jv;
                    }
                }*/

            }
        }

        p++;
    }
    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] < minim){
                    minim = a[i][j];
                    poz1 = i;
                    poz2 = j;
                }
            }
        }
    fout<<minim<<" "<<poz1<<" "<<poz2;

    return 0;
}