Advertisement
SuitNdtie

2Bk Greedy

Apr 24th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.12 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<queue>
  3. using namespace std;
  4.  
  5. struct node{
  6.     int i,j;
  7.     int w;
  8.     bool operator < (const node& rhs)const
  9.     {
  10.         return w > rhs.w;
  11.     }
  12. };
  13.  
  14. bool inB(int I,int n){
  15.     return (I >= 0 && I < n);
  16. }
  17.  
  18. int main()
  19. {
  20.     int n;
  21.     scanf("%d",&n);
  22.     int sI,sJ;
  23.     int arr[n][n];
  24.     for(int i = 0 ; i < n ; i++){
  25.         for(int j = 0 ; j < n ; j++){
  26.             scanf("%d",&arr[i][j]);
  27.             if(arr[i][j] == 0){
  28.                 sI = i;
  29.                 sJ = j;
  30.             }
  31.         }
  32.     }
  33.     bool visited[n][n];for(int i = 0 ; i < n ; i++)for(int j = 0 ; j < n ; j ++)visited[i][j] = false;
  34.     priority_queue<node> pq;
  35.     pq.push({sI,sJ,0});
  36.     int ans = -2e9;
  37.    
  38.     int moveI[4] = {-1,0,1,0};
  39.     int moveJ[4] = {0,1,0,-1};
  40.     while(!pq.empty()){
  41.         int uI = pq.top().i;
  42.         int uJ = pq.top().j;
  43.         int uW = pq.top().w;
  44.         pq.pop();
  45.        
  46.         if(uW == 0 && ans != -2e9)break;
  47.         if(visited[uI][uJ])continue;
  48.         visited[uI][uJ] = true;
  49.        
  50.         if(uW > ans)ans = uW;
  51.         for(int i = 0 ; i < 4 ; i++){
  52.             int vI = uI + moveI[i];
  53.             int vJ = uJ + moveJ[i];
  54.             if(inB(vI,n) && inB(vJ,n) && !visited[vI][vJ]){
  55.                 pq.push({vI,vJ,arr[vI][vJ]});
  56.             }
  57.         }
  58.     }
  59.     printf("%d",ans);
  60.     return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement