Advertisement
Guest User

Untitled

a guest
Oct 17th, 2018
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.05 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define ff first
  4. #define ss second
  5. #define mp make_pair
  6.  
  7. using namespace std;
  8.  
  9. typedef long long ll;
  10.  
  11. char mat[1005][1005];
  12. int dist[1005][1005];
  13. int n,m;
  14. int row[4] = {0,1,0,-1};
  15. int col[4] = {1,0,-1,0};
  16.  
  17. char bfs(pair<int,int> s) {
  18.     for(int i = 0; i < n; i++)
  19.         for(int j = 0; j < m; j++)
  20.             dist[i][j] = -1;
  21.  
  22.     queue<pair<int,int>> Q;
  23.     Q.push(s);
  24.     dist[s.ff][s.ss] = 0;
  25.     while(!Q.empty()) {
  26.         auto x = Q.front();
  27.         Q.pop();
  28.         if(mat[x.ff][x.ss] >= 'a' and mat[x.ff][x.ss])
  29.             return dist[x.ff][x.ss];
  30.  
  31.         for(int k = 0; k < 4; k++) {
  32.             int i = row[k] + x.ff;
  33.             int j = col[k] + x.ss;
  34.             if(i < 0 or i >= n or j < 0 or j >= m or mat[i][j] == '#' or dist[i][j] != -1)
  35.                 continue;
  36.             dist[i][j] = dist[x.ff][x.ss]+1;
  37.             Q.push(mp(i,j));
  38.         }
  39.     }
  40.  
  41.     return -1;
  42. }
  43.  
  44. int main(){
  45.     pair<int,int> st;
  46.     scanf("%d%d", &n, &m);
  47.  
  48.     for(int i = 0; i < n; i++) {
  49.         scanf(" %s", mat[i]);
  50.         for(int j = 0; j < m; j++) {
  51.             if(mat[i][j] == '*')
  52.                 st = mp(i,j);
  53.         }
  54.     }
  55.  
  56.     printf("%d\n", bfs(st));
  57.  
  58.     return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement