Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int INF = 2e9;
- using pii = pair < int,pair<int,int> >;
- int ar[1001][1001];
- int ki[5] = {0,0,0,1,-1}, kj[5] = {0,1,-1,0,0};
- int n;
- int main(){
- scanf("%d",&n);
- int ar[n+1][n+1];
- long long dis[n+1][n+1];
- bool visited[n+1][n+1];
- int si=-1,sj=-1,ei=-1,ej=-1,mx=0;
- for(int i=1;i<=n;i++){
- for(int j=1;j<=n;j++){
- dis[i][j] = INF;
- visited[i][j] = false;
- scanf("%d",&ar[i][j]);
- if(ar[i][j] == 0){
- if(si == -1&&sj == -1){
- si = i;
- sj = j;
- }
- else {
- ei = i;
- ej = j;
- }
- }
- }
- }
- priority_queue < pii , vector<pii> , greater<pii> > pq;
- dis[si][sj] = 0;
- pq.push({ 0 , {si,sj} });
- while(pq.size()>0){
- int ui,uj;
- ui = pq.top().second.first;
- uj = pq.top().second.second;
- pq.pop();
- visited[ui][uj] = true;
- if(ar[ui][uj]>mx) mx = ar[ui][uj];
- if(ui == ei && uj == ej){
- printf("%d",mx);
- break;
- }
- for(int k=1;k<=4;k++){
- if(ui+ki[k]>=1 && ui+ki[k]<=n && uj+kj[k]>=1 && uj+kj[k]<=n && visited[ui+ki[k]][uj+kj[k]]==false && dis[ui][uj]+ar[ui+ki[k]][uj+kj[k]]<dis[ui+ki[k]][uj+kj[k]] ){
- dis[ui+ki[k]][uj+kj[k]]= dis[ui][uj]+ar[ui][uj];
- pq.push({ar[ui+ki[k]][uj+kj[k]] ,{ui+ki[k],uj+kj[k]} });
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement