Pagini recente » Cod sursa (job #2498210) | Cod sursa (job #2190052) | Cod sursa (job #1842853) | Cod sursa (job #615974) | Cod sursa (job #2736867)
#include <bits/stdc++.h>
#define ll long long
#define cin fin
#define cout fout
#define NEXTROW (i + dirI[k])
#define NEXTCOL (j + dirJ[k])
using namespace std;
ifstream fin("matrice2.in");
ofstream fout("matrice2.out");
int n, q, mat[305][305];
int dirI[] = {1, 0, -1, 0};
int dirJ[] = {0, 1, 0, -1};
bitset <305> reached[305];
int findAns(int startX, int startY, int endX, int endY) {
priority_queue <pair <int, pair <int, int> > > best;
best.push(make_pair(mat[startX][startY], make_pair(startX, startY)));
while (!best.empty()) {
int cost = best.top().first;
int i = best.top().second.first;
int j = best.top().second.second;
best.pop();
if (i == endX && j == endY)
return cost;
if (!reached[i][j]) {
reached[i][j] = 1;
for (int k = 0; k < 4; k++)
if (NEXTROW >= 1 && NEXTROW <= n && NEXTCOL >= 1 && NEXTCOL <= n)
if (!reached[NEXTROW][NEXTCOL])
best.push(make_pair(min(cost, mat[NEXTROW][NEXTCOL]), make_pair(NEXTROW, NEXTCOL)));
}
}
}
int main() {
ios :: sync_with_stdio(0);
cin.tie(0);
cin >> n >> q;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
cin >> mat[i][j];
for (int query = 1; query <= q; query++) {
int startX, startY, endX, endY;
cin >> startX >> startY >> endX >> endY;
cout << findAns(startX, startY, endX, endY) << '\n';
for (int i = 1; i <= n; i++)
reached[i].reset();
}
return 0;
}