地址 https://www.acwing.com/problem/content/description/846/

给定一个n*m的二维整数数组,用来表示一个迷宫,数组中只包含0或1,其中0表示可以走的路,1表示不可通过的墙壁。

最初,有一个人位于左上角(1, 1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。

请问,该人从左上角移动至右下角(n, m)处,至少需要移动多少次。

数据保证(1, 1)处和(n, m)处的数字为0,且一定至少存在一条通路。

输入格式

第一行包含两个整数n和m。

接下来n行,每行包含m个整数(0或1),表示完整的二维数组迷宫。

输出格式

输出一个整数,表示从左上角移动至右下角的最少移动次数。

数据范围

1≤n,m≤100

输入样例:

输出样例:

解法

BFS搜索  不采取DFS是因为BFS可以获取最短路径

#include <iostream>
#include <algorithm>
#include <queue> using namespace std; const int N = ; int g[N][N];
int dis[N][N]; int n, m; typedef pair<int, int> PII; queue<PII> que; int rowadd[] = { ,-,, };
int coladd[] = { ,,,- }; void bfs(int row, int col)
{
while (!que.empty())
{
PII xy = que.front();
que.pop(); for (int i = ; i < ; i++) {
int nextrow = xy.first + rowadd[i];
int nextcol = xy.second + coladd[i]; if (nextrow == n && nextcol == m) {
//达到终点
cout << (dis[xy.first][xy.second] + ) << endl;
return;
} if (nextrow >= && nextrow <= n && nextcol >= && nextcol <= m)
{
if (g[nextrow][nextcol] == ) {
g[nextrow][nextcol] = ; dis[nextrow][nextcol] = dis[xy.first][xy.second] + ;
que.push({ nextrow,nextcol });
}
}
} } } int main()
{
cin >> n >> m;
for (int i = ; i <= n; i++) {
for (int j = ; j <= m; j++) {
cin >> g[i][j];
}
} que.push({ , });
g[][] = ;
dis[][] = ;
bfs(, ); return ;
}

最新文章

  1. 给jquery-validation插件添加控件的验证回调方法
  2. Keil&gt; 编译器特有的功能 &gt; 关键字和运算符 &gt; __weak
  3. Hibernate 系列 07 - Hibernate中Java对象的三种状态
  4. 设计模式(Design Pattern)系列之.NET专题
  5. cocoapods 升级到最新beta 版
  6. Git学习笔记(7)——多人协作
  7. Java 控制线程
  8. Java生成动态GIF图片
  9. 如何优化cocos2d程序的内存使用和程序大小:第一部分
  10. 用c#开发微信(1)服务号的服务器配置和企业号的回调模式 - url接入 (源码下载)
  11. MySQL扩展功能 - 重复插入
  12. nginx使用keepalived实现高可用
  13. iOS集成微信支付
  14. Hper-V卸载
  15. [Shell]sed命令在MAC和Linux下的不同使用方式
  16. CF1121C 模拟
  17. NOI2017 游记
  18. java基础学习之抽象类
  19. 表单:提交验证,及blur事件验证
  20. SQL Server 数据库备份失败解决方法

热门文章

  1. What happened when new an object in JVM ?
  2. Ubuntu 无法打开系统设置
  3. C#中PadLeft,PadRight的用法
  4. 腾讯 Techo 开发者大会首发来袭!云原生中间件技术实践等你来!
  5. 抖音短视频教程VIP培训课程(2019实时更新中)
  6. 工具-Xmind常用快捷键/使用
  7. 10. Vue - axios
  8. Map随笔:有序的HashMap——LinkedHashMap
  9. dotnet core 调用electron来开发UI的探索
  10. sublime插件开发教程4