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;
- int n;
- struct node{
- int vi,vj,w;
- bool operator < (const node & rhs) const{
- return ! (w< rhs.w) ;
- }
- };
- int main(){
- scanf("%d",&n);
- int si=-1,sj=-1,mx=0,ei=-1,ej=-1;
- vector <int> ar[n+5];
- vector <long long> dis[n+5];
- vector <bool> visited[n+5];
- vector <node> g[n+5][n+5];
- for(int i=1;i<=n;i++){
- ar[i].push_back(0);
- visited[i].push_back(0);
- dis[i].push_back(INF);
- for(int j=1;j<=n;j++){
- dis[i].push_back(INF);
- visited[i].push_back(0);
- int x;
- scanf("%d",&x);
- ar[i].push_back(x);
- if(ar[i][j]==0){
- if(si==-1 && sj==-1){
- si=i;
- sj=j;
- }
- else {
- ei=i;
- ej=j;
- }
- }
- if(i>1){
- g[i][j].push_back({i-1,j,ar[i-1][j]});
- g[i-1][j].push_back({i,j,ar[i][j]});
- }
- if(j>1){
- g[i][j].push_back({ i,j-1,ar[i][j-1] });
- g[i][j-1].push_back({ i,j,ar[i][j] });
- }
- }
- }
- priority_queue < node > pq;
- dis[si][sj]=0;
- pq.push({ si,sj,dis[si][sj] });
- while(pq.size()>0){
- int ui=pq.top().vi , uj=pq.top().vj , d=pq.top().w;
- pq.pop();
- if (visited[ui][uj])
- continue;
- visited[ui][uj]=true;
- if(ar[ui][uj]>mx) mx=ar[ui][uj];
- if( ei==ui && ej==uj ) {
- printf("%d ",mx);
- break;
- }
- if(ar[ui][uj]>mx) mx=ar[ui][uj];
- for(auto vw:g[ui][uj]){
- int vi,vj,w;
- vi=vw.vi;
- vj=vw.vj;
- w=vw.w;
- if(visited[vi][vj]==false && dis[ui][uj]+w<dis[vi][vj] ){
- dis[vi][vj] = dis[ui][uj] + w;
- pq.push({ vi,vj,ar[vi][vj]});
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement