文章

9

粉丝

0

获赞

39

访问

972

头像
迷宫 题解:bfs 解法
P1563 天津大学/南开大学机试题
发布于2026年2月26日 11:30
阅读数 21

  1. 思路:二维数组 maze 存储地图, vis 存储是否访问过。

  2. bfs,和层序遍历一样,用队列实现。

    1. 先将起点入队,标记,然后遍历起点的四个方向,若有 可以移动的方向,则入队,不停循环。

 // 1019
 #include <bits/stdc++.h>
 using namespace std;
 ​
 #define maxn 105
 int dir[4][2] = {1,0,0,1,-1,0,0,-1}; // 右 下 左 上
 char maze[maxn][maxn]; // 起始位从 1 开始,则 0行 0列都是空值
 int vis[maxn][maxn];
 ​
 void init(){
     memset(maze, 0, sizeof(maze));
     memset(vis, 0, sizeof(vis));
 }
 ​
 typedef struct Node{
     int x,y;
     int step;
 } Node;
 ​
 int bfs(int sx, int sy){
     queue<Node> q;
     int ans = -1;
     Node start = {sx,sy, 0}; // 起点加入队列
     q.push(start);
     vis[sx][sy] = 1; // 标记为已访问
     while(!q.empty()){
         Node cur = q.front();
         q.pop();
    &n...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发