Cod sursa(job #2736897)

Utilizator Leonard123Mirt Leonard Leonard123 Data 4 aprilie 2021 10:10:30
Problema Matrice 2 Scor 35
Compilator cpp-64 Status done
Runda oni_wellcode_day_4 Marime 1.65 kb
#include<bits/stdc++.h>
#define pii pair<int, int>
using namespace std;

ifstream fin("matrice2.in");
ofstream fout("matrice2.out");

int n, q, grid[305][305], cost[305][305], x1, yy1, x2, y2, dl[] = {0, 1, -1, 0}, dc[] = {1, 0, 0, -1};
priority_queue <pair<int, pii>> order;

int solve() {
    order.push(make_pair(grid[x1][yy1],make_pair(x1, yy1)));
    cost[x1][yy1] = grid[x1][yy1];
    while (true) {
        int val = order.top().first;
        int line = order.top().second.first;
        int column = order.top().second.second;
        order.pop();
        if (val != cost[line][column]) 
            continue;
        for (int i = 0; i < 4; i++) {
            int new_line = line + dl[i];
            int new_column = column + dc[i];
            if (max(new_line, new_column) <= n && min(new_line, new_column) > 0) 
                if (cost[new_line][new_column] < min(cost[line][column], grid[new_line][new_column])) {
                    cost[new_line][new_column] = min(cost[line][column], grid[new_line][new_column]);
                    if (new_line == x2 && new_column == y2)
                        return cost[new_line][new_column];
                    order.push({cost[new_line][new_column], {new_line, new_column}});
                }
        }
    }
}

int main() {
    fin >> n >> q; 
    for (int i = 1; i <= n; i++) 
        for (int j = 1; j <= n; j++)
            fin >> grid[i][j];

    while (q--) {
        for (int i = 1; i <= n; i++ )
            for (int j = 1; j <= n; j++)
                cost[i][j] = 0;

        fin >> x1 >> yy1 >> x2 >> y2;
        while (!order.empty()) {
            order.pop();
        }
        fout << solve() << "\n";
    }
}