vitormartinotti

mina

Sep 3rd, 2026
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.34 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define MAXN 110
  3. #define pii pair<int,int>
  4.  
  5. using namespace std;
  6.  
  7. const int INF = 1e9;
  8.  
  9. int m[MAXN][MAXN];
  10. int dist[MAXN][MAXN]; //dist[i][j] = menor distância da casa (i;j) para a origem
  11.  
  12. int n;
  13.  
  14. int dx[] = {0, 0, 1, -1};
  15. int dy[] = {1, -1, 0, 0};
  16.  
  17. void bfs01(pii s){
  18.     deque<pii> dq;
  19.     dq.push_front(s);
  20.     dist[s.first][s.second] = 0;
  21.     while(!dq.empty()){
  22.         pii v = dq.front(); dq.pop_front();
  23.         int x = v.first;
  24.         int y = v.second;
  25.         for(int k = 0; k < 4; k++){ //vizinhos de v
  26.             int nx = x + dx[k];
  27.             int ny = y + dy[k];
  28.            
  29.             if(nx < 0 || nx >= n) continue;
  30.             if(ny < 0 || ny >= n) continue;
  31.            
  32.             if(dist[x][y]+m[nx][ny] < dist[nx][ny]){
  33.                 dist[nx][ny] = dist[x][y]+m[nx][ny];
  34.                 if(m[nx][ny]==1){
  35.                     dq.push_back({nx,ny});
  36.                 }
  37.                 else{
  38.                     dq.push_front({nx,ny});
  39.                 }
  40.             }
  41.         }
  42.     }
  43. }
  44.  
  45. int main(){
  46.     scanf("%d",&n);
  47.    
  48.     for(int i = 0; i < n; i++){
  49.         for(int j = 0; j < n; j++){
  50.             scanf("%d", &m[i][j]);
  51.             dist[i][j] = INF;
  52.         }
  53.     }
  54.    
  55.     bfs01({0,0});
  56.    
  57.     printf("%d", dist[n-1][n-1]);
  58.    
  59.     return 0;
  60.    
  61. }
  62.  
Advertisement
Add Comment
Please, Sign In to add comment