博客
关于我
迷宫(bfs)
阅读量:520 次
发布时间:2019-03-07

本文共 1794 字,大约阅读时间需要 5 分钟。

为了解决这个问题,我们需要在一个网格迷宫中找到所有可以到达的格子。每次移动可以向上下左右移动一格,但向左移动的次数不能超过 x 次,向右移动的次数不能超过 y 次。我们可以使用广度优先搜索(BFS)来解决这个问题。

方法思路

  • 问题分析:我们需要从起点出发,找到所有可以到达的格子。每次移动可以向上、下、左、右移动一格,但左和右移动的次数分别不能超过 x 和 y 次。
  • 转换问题:将问题转化为检查每个格子是否满足左移次数不超过 x 次,右移次数不超过 y 次,并且存在一条路径连接起点和该格子。
  • BFS 算法:使用 BFS 进行搜索,只处理满足上述条件的格子。每次扩展四个方向的邻居,检查是否越界、是否为障碍以及是否满足移动次数限制。
  • 优化:预处理每个格子是否满足左移和右移次数限制,避免不必要的计算和状态扩展。
  • 解决代码

    #include 
    #include
    #include
    using namespace std;int main() { // 读取输入 int n, m; cin >> n >> m; int r, c; cin >> r >> c; r--; c--; // 转为0-based索引 int x, y; cin >> x >> y; char mp[n][m]; for (int i = 0; i < n; ++i) { string s; cin >> s; for (int j = 0; j < m; ++j) { mp[i][j] = s[j]; } } // 初始化访问数组和队列 bool visited[n][m]; queue
    > q; visited[r][c] = true; q.push(make_pair(r, c)); int sum = 1; // 起点计数 // 四个方向:上下左右 int dirs[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; while (!q.empty()) { pair
    current = q.front(); q.pop(); int i = current.first, j = current.second; for (int d = 0; d < 4; ++d) { int ni = i + dirs[d][0]; int nj = j + dirs[d][1]; // 检查是否越界 if (ni < 0 || ni >= n || nj < 0 || nj >= m) { continue; } // 检查是否是障碍 if (mp[ni][nj] != '.') { continue; } // 计算max_left和max_right int dr = ni - r; int dc = nj - c; int max_left = max(-dr, 0); int max_right = max(dc, 0); if (max_left <= x && max_right <= y) { if (!visited[ni][nj]) { visited[ni][nj] = true; sum++; q.push(make_pair(ni, nj)); } } } } cout << sum << endl; return 0;}

    代码解释

  • 输入处理:读取迷宫的大小、起点、左移和右移次数限制,以及迷宫格子的布局。
  • 初始化:将起点标记为已访问,并将其加入队列。
  • BFS 过程:从队列中取出当前位置,检查四个方向的邻居。对于每个邻居,检查是否越界、是否为障碍以及是否满足移动次数限制。如果满足条件且未被访问过,标记为已访问并加入队列。
  • 结果输出:统计并输出所有可以到达的格子数量。
  • 这种方法确保了我们高效地找到所有满足条件的格子,避免了不必要的计算和状态扩展。

    转载地址:http://iuqjz.baihongyu.com/

    你可能感兴趣的文章
    npm的常用配置项---npm工作笔记004
    查看>>
    npm的问题:config global `--global`, `--local` are deprecated. Use `--location=global` instead 的解决办法
    查看>>
    npm编译报错You may need an additional loader to handle the result of these loaders
    查看>>
    npm设置淘宝镜像、升级等
    查看>>
    npm设置源地址,npm官方地址
    查看>>
    npm设置镜像如淘宝:http://npm.taobao.org/
    查看>>
    npm配置安装最新淘宝镜像,旧镜像会errror
    查看>>
    NPM酷库052:sax,按流解析XML
    查看>>
    npm错误 gyp错误 vs版本不对 msvs_version不兼容
    查看>>
    npm错误Error: Cannot find module ‘postcss-loader‘
    查看>>
    npm,yarn,cnpm 的区别
    查看>>
    NPOI
    查看>>
    NPOI之Excel——合并单元格、设置样式、输入公式
    查看>>
    NPOI初级教程
    查看>>
    NPOI利用多任务模式分批写入多个Excel
    查看>>
    NPOI在Excel中插入图片
    查看>>
    NPOI将某个程序段耗时插入Excel
    查看>>
    NPOI格式设置
    查看>>
    NPOI设置单元格格式
    查看>>
    Npp删除选中行的Macro录制方式
    查看>>