RQNOJ 195校园迷宫(简单BFS)

本文介绍了一种基于广度优先搜索(BFS)的算法实现,该算法用于在一个二维地图中寻找从起点到终点的最短路径。通过使用队列结构存储待访问节点,并结合方向数组来遍历四周邻居节点的方式,实现了地图上无障碍物时的有效路径查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 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 }

 

转载于:https://www.cnblogs.com/try86/archive/2012/05/14/2499195.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值