Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- ifstream fin("acces.in");
- ofstream fout("acces.out");
- int n, a[1005][1005];
- int b[1005][1005];
- int dx[] = {0, 0, 1, -1};
- int dy[] = {-1, 1, 0, 0};
- queue < pair < int, int > > Q;
- void Citire()
- {
- int i, j;
- fin >> n;
- for(i = 1; i <= n; i++)
- for(j = 1; j <= n; j++)
- fin >> a[i][j];
- fin.close();
- }
- void Bordare()
- {
- int i, j;
- for(i = 0; i <= n + 1; i++)
- {
- a[i][0] = a[i][n + 1] = 1000002;
- a[0][i] = a[n + 1][i] = 1000002;
- }
- }
- void Init()
- {
- int i, j;
- for(i = 1; i <= n; i++)
- for(j = 1; j <= n; j++)
- b[i][j] = 1000000;
- }
- void Lee()
- {
- int k, i, j, x, y;
- b[1][1] = a[1][1];
- Q.push({1, 1});
- while( !Q.empty())
- {
- i = Q.front().first;
- j = Q.front().second;
- Q.pop();
- for(k = 0; k < 4; k++)
- {
- x = i + dx[k];
- y = j + dy[k];
- if(b[x][y] > max(b[i][j], a[x][y]) && b[x][y] != 1000002)
- {
- b[x][y] = max(b[i][j], a[x][y]);
- Q.push({x, y});
- }
- }
- }
- fout << b[n][n] << "\n";
- fout.close();
- }
- int main()
- {
- Citire();
- Bordare();
- Init();
- Lee();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement