Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define MAXN 110
- #define pii pair<int,int>
- using namespace std;
- const int INF = 1e9;
- int m[MAXN][MAXN];
- int dist[MAXN][MAXN]; //dist[i][j] = menor distância da casa (i;j) para a origem
- int n;
- int dx[] = {0, 0, 1, -1};
- int dy[] = {1, -1, 0, 0};
- void bfs01(pii s){
- deque<pii> dq;
- dq.push_front(s);
- dist[s.first][s.second] = 0;
- while(!dq.empty()){
- pii v = dq.front(); dq.pop_front();
- int x = v.first;
- int y = v.second;
- for(int k = 0; k < 4; k++){ //vizinhos de v
- int nx = x + dx[k];
- int ny = y + dy[k];
- if(nx < 0 || nx >= n) continue;
- if(ny < 0 || ny >= n) continue;
- if(dist[x][y]+m[nx][ny] < dist[nx][ny]){
- dist[nx][ny] = dist[x][y]+m[nx][ny];
- if(m[nx][ny]==1){
- dq.push_back({nx,ny});
- }
- else{
- dq.push_front({nx,ny});
- }
- }
- }
- }
- }
- int main(){
- scanf("%d",&n);
- for(int i = 0; i < n; i++){
- for(int j = 0; j < n; j++){
- scanf("%d", &m[i][j]);
- dist[i][j] = INF;
- }
- }
- bfs01({0,0});
- printf("%d", dist[n-1][n-1]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment