1 /*  
 2 *  简单BFS  
 3 */
 4 
 5 #include <cstdio>
 6 #include <cstring>
 7 #include <iostream>
 8 
 9 using namespace std;
10 
11 const int N = 2005;
12 
13 int map[N][N];
14 bool vis[N][N];
15 struct node {
16     int x;
17     int y;
18     int c;
19 }Q[N*N], s, e;
20 int front, rear;
21 int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
22 
23 int BFS(int n, int m) {
24     node first, next;
25     memset(vis, true, sizeof(vis));
26     front = rear = 0;
27     vis[s.x][s.y] = false;
28     Q[front++] = s;
29     while (rear < front) {
30         first = Q[rear++];
31         if (first.x==e.x && first.y==e.y) return first.c;
32         for (int i=0; i<4; ++i) {
33             next.x = first.x + dir[i][0];
34             next.y = first.y + dir[i][1];
35             next.c = first.c + 1;
36             if (next.x>=0&&next.x<n&&next.y>=0&&next.y<m&&vis[next.x][next.y]&&map[next.x][next.y]==0) {
37                 Q[front++] = next;
38                 vis[next.x][next.y] = false;
39             }
40         }
41     }
42     return -1;
43 }
44 
45 int main() {
46     int n, m;
47     while (scanf("%d%d", &n, &m) != EOF) {
48         for (int i=0; i<n; ++i) {
49             for (int j=0; j<m; ++j) scanf ("%d", &map[i][j]);
50         }        
51         scanf ("%d%d%d%d", &s.x, &s.y, &e.x, &e.y);
52         --s.x, --s.y, --e.x, --e.y;
53         s.c = 0;
54         int ans = BFS(n, m);
55         if (ans < 0) printf ("No Answer!\n");
56         else printf ("%d\n", ans);
57     }
58     return 0;
59 }

 

相关文章:

  • 2021-06-17
  • 2021-04-18
  • 2018-07-25
  • 2022-01-19
  • 2021-07-12
  • 2021-08-26
  • 2021-11-30
猜你喜欢
  • 2021-06-13
  • 2022-12-23
  • 2022-02-18
  • 2021-09-25
  • 2022-12-23
  • 2021-05-11
  • 2021-12-09
相关资源
相似解决方案