Advertisement
Abrar_Al_Samit

UVa10653

Feb 11th, 2021
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int INF = 2e9;
  5.  
  6. int R, C, s1, s2, d1, d2;
  7. int dr[] = {1, 0, -1, 0};
  8. int dc[] = {0, 1, 0, -1};
  9. int d[1001][1001];
  10. bool vis[1001][1001];
  11.  
  12. struct cell{
  13.     int r, c;
  14. };
  15. bool valid(int r, int c) {
  16.     return r>=0 && r<R && c>=0 && c<C && vis[r][c]==0;
  17. }
  18. void Run() {
  19.    
  20.     vis[0][0] = 1;
  21.     queue<cell>q;
  22.     cell cell1; cell1.r = s1, cell1.c = s2;
  23.     q.push(cell1);
  24.     while((int)q.size()) {
  25.         cell cur = q.front(); q.pop();
  26.         int r = cur.r, c = cur.c;
  27.         for(int i=0; i<4; i++) {
  28.             if(valid(r+dr[i], c+dc[i])) {
  29.                 d[r+dr[i]][c+dc[i]] = 1+d[r][c];
  30.                 cell to; to.r = r+dr[i], to.c = c+dc[i];
  31.                 vis[to.r][to.c] = 1;
  32.                 q.push(to);
  33.             }
  34.         }
  35.     }
  36.    
  37.     cout << d[d1][d2] << "\n";
  38. }
  39. int main() {
  40.     while(1) {
  41.         cin >> R >> C;
  42.         if(R==C && R==0) break;
  43.         for(int i=0; i<R; i++)
  44.         for(int j=0; j<C; j++)
  45.         vis[i][j] = d[i][j] = 0;
  46.         int rCnt; cin >> rCnt;
  47.         while(rCnt--) {
  48.             int r; cin >> r;
  49.             int cCnt; cin >> cCnt;
  50.             while(cCnt--) {
  51.                 int c; cin >> c;
  52.                 vis[r][c] = 1;
  53.             }
  54.         }
  55.         cin >> s1 >> s2 >> d1 >> d2;
  56.         Run();
  57.     }
  58.     return 0;
  59. }
  60.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement