Cod sursa(job #2061756)

Utilizator alexsandulescuSandulescu Alexandru alexsandulescu Data 9 noiembrie 2017 17:54:09
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.09 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("rj.in");
ofstream g("rj.out");

int N, M, x, y, ar[103][103], aj[103][103];
char a[103][103];
int dx[] = {-1, -1, 0, 1, 1, 1, 0, -1},
    dy[] = {0, 1, 1, 1, 0, -1, -1, -1};
struct nod {
    int x, y;
};
void ClearScreen(int x[103][103]) {
    int n;
    printf( "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" );
    for(int i = 1; i <= N; i++) {
        for(int j = 1; j <= M; j++)
            cout << x[i][j];
        cout << "\n";
    }

}
int lee(int xs, int ys, int x[103][103]) {
    nod q[103 * 103] = {0};
    for(int i = 1; i <= N; i++)
        for(int j = 1; j <= M; j++)
            x[i][j] = 0;
    for(int i = 0; i <= N + 1; i++)
        x[i][0] = x[i][M + 1] = -1;
    for(int i = 0; i <= M + 1; i++)
        x[0][i] = x[N + 1][i] = -1;
    int p = 1, u = 1;
    x[xs][ys] = 1, q[u].x = xs, q[u].y = ys;
    while(p <= u) {
        int i = q[p].x, j = q[p].y;
        for(int s = 0; s < 8; s++) {
            int ii = i + dx[s], jj = j + dy[s];
            if(a[ii][jj] == ' ' && x[ii][jj] == 0) x[ii][jj] = x[i][j] + 1, q[++u].x = ii, q[u].y = jj;
            //ClearScreen(x);
        }
        p++;
    }
    return -1;
}
int main()
{
    f >> N >> M;
    f.get();
    for(int i = 1; i <= N; i++)
        for(int j = 1; j <= M + 1; j++)
            f.get(a[i][j]);
    for(int i = 1; i <= N; i++)
        for(int j = 1; j <= M; j++) {
            if(a[i][j] == 'R') lee(i, j, ar);
            else if(a[i][j] == 'J') lee(i, j, aj);
        }
    int MIN = INT_MAX;
    //ClearScreen(ar);
    //ClearScreen(aj);
    for(int i = 1; i <= N; i++)
        for(int j = 1; j <= M; j++)
            if(ar[i][j] == aj[i][j] && a[i][j] != 'R' && a[i][j] != 'J' && a[i][j] != 'X' && ar[i][j] > 0) {
                if(MIN > ar[i][j]) MIN = ar[i][j], x = i, y = j;
            }
    g << MIN << " " << x << " " << y << " " << "\n";
    return 0;
}