Cod sursa(job #1224827)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 31 august 2014 19:49:39
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.31 kb
#include <cstdio>
#define MAXN 160

using namespace std;

int dix[8]  = {1, 1, 0, -1, -1, -1, 0, 1};
int diy[8]  = {0, 1, 1, 1, 0, -1, -1, -1};
int n, m;
char z[MAXN][MAXN];
int r[MAXN][MAXN], jul[MAXN][MAXN];
int nq, finx, finy, pasi;

struct coord
{
    int x;
    int y;
}c[11005];
coord pozR, pozJ;

void citire()
{
    scanf("%d%d\n", &n, &m);
    char f;
    int ok = 0;
    for (int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++){
            scanf("%c", &z[i][j]);
            if (z[i][j] == '\n')
            {
                while (j <= m)
                    z[i][j++] = ' ';
                ok = 1;
            }
            if(z[i][j] == 'R'){
                pozR.x =i;
                pozR.y =j;
            }
            else
            if(z[i][j] == 'J'){
                pozJ.x = i;
                pozJ.y = j;
            }
        }
        if (!ok)
            scanf("%c", &f);
        ok = 0;
    }
    for (int i=1; i<=n; i++){
        for (int j=1; j<=m; j++){
            if(z[i][j] == ' '){
                r[i][j] = 0;
                jul[i][j] = 0;
            }
            else{
                r[i][j] = -1;
                jul[i][j] = -2;
            }
        }
    }
}

void lee(int a[MAXN][MAXN], coord poz)
{
    coord nou;
    nq = 1;
    a[poz.x][poz.y] = 1;
    c[0] = poz;
    for (int i=0; i<nq; i++){
        for(int j=0; j<8; j++){
            nou.x = c[i].x + dix[j];
            nou.y = c[i].y + diy[j];
            if (nou.x > 0 && nou.y <=m && nou.y > 0 && nou.x <=n){
                if (a[nou.x][nou.y] == 0){
                    a[nou.x][nou.y] = a[c[i].x][c[i].y] + 1;
                    c[nq ++] = nou;
                }
            }
        }
    }
}
void rezolvare()
{
    int ok;
    ok =1;
    for (int i=1; i<=n && ok==1; i++){
        for(int j=1; j<=m && ok==1; j++){
            if(r[i][j] != 0 && r[i][j] == jul[i][j]){
                printf("%d %d %d", r[i][j], i, j);
                ok = 0;
            }
           // if (jul[i][j] == -2) jul[i][j] = 0;
            //printf("%d\t", jul[i][j]);
        }
    }
}

int main()
{
    freopen("rj.in", "r", stdin);
    freopen("rj.out", "w", stdout);
    citire();
    lee(r, pozR);
    lee(jul, pozJ);
    rezolvare();
    return 0;
}