走迷宫
2021/4/13 10:58:00
本文主要是介绍走迷宫,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
给定一个 n×mn×m 的二维整数数组,用来表示一个迷宫,数组中只包含 00 或 11,其中 00 表示可以走的路,11 表示不可通过的墙壁。
最初,有一个人位于左上角 (1,1)(1,1) 处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。
请问,该人从左上角移动至右下角 (n,m)(n,m) 处,至少需要移动多少次。
数据保证 (1,1)(1,1) 处和 (n,m)(n,m) 处的数字为 00,且一定至少存在一条通路。
输入格式
第一行包含两个整数 nn 和 mm。
接下来 nn 行,每行包含 mm 个整数(00 或 11),表示完整的二维数组迷宫。
输出格式
输出一个整数,表示从左上角移动至右下角的最少移动次数。
数据范围
1≤n,m≤1001≤n,m≤100
输入样例:
5 5 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0
输出样例:
8代码+ 思路:
宽搜 搜最短路 : 一圈一圈 层层的走 所有距离为1 的 2 的 3 的走
dp最问题是 特殊的最短路问题 最短路包含dp
所有边权都是1 时, 用bfs最短路
其它有专门的最短路
初始状态 放queue
while queue !empty()
{
队头给t
t扩展
}
1 /* 2 宽搜 搜最短路 : 一圈一圈 层层的走 所有距离为1 的 2 的 3 的走 3 dp最问题是 特殊的最短路问题 最短路包含dp 4 5 所有边权都是1 时, 用bfs最短路 6 其它有专门的最短路 7 8 */ 9 10 /* 11 初始状态 放queue 12 while queue !empty() 13 { 14 队头给t 15 t扩展 16 } 17 */ 18 19 20 #include <iostream> 21 #include <cstring> 22 #include <algorithm> 23 // #include <queue> 手写队列 24 25 using namespace std; 26 27 const int N = 110; 28 29 typedef long long LL; 30 typedef pair<int,int> PII; 31 32 int n, m; 33 int g[N][N]; // 存储地图 34 35 int d[N][N]; // 存储 每个点到起点的距离 36 37 38 PII q[N * N]; // 手写队列 39 40 int dx[]= {-1,0,1,0}, dy[]={0,1,0,-1}; // 向量表示 四个方向 41 int bfs() 42 { 43 int hh = 0, tt =0; // 队头队尾 44 q[0] = {0,0}; // 起点 45 46 memset(d, -1, sizeof d); //初始化距离 表示-1没有走过 47 d[0][0] = 0; 48 49 50 while(hh <= tt) 51 { 52 auto t = q[hh ++]; // 每次取出队头 53 54 //尝试四个方向扩展 55 for(int i = 0 ; i<4 ; i++) 56 { 57 // 沿着当前方向走 到那个点 58 int x = t.first + dx[i], y = t.second + dy[i]; 59 if(x >=0 && x <n && y >= 0 && y <m && g[x][y]==0 && d[x][y]== -1) // =0空地可以走的 , =-1没有走过 60 {//第一次搜到的是最短距离, 如果不是第一次搜到就不是最短 61 d[x][y] = d[t.first][t.second] + 1; 62 q[++ tt] = {x,y}; 63 } 64 } 65 } 66 return d[n-1][m-1]; // 输出右下角的点 67 68 } 69 70 int main() 71 { 72 73 cin >> n >> m; 74 75 // 读图 76 for(int i = 0; i< n ;i++) 77 for(int j = 0; j<m; j++) 78 { 79 cin >> g[i][j]; 80 } 81 cout << bfs(); 82 83 84 return 0; 85 }
这篇关于走迷宫的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-04TiDB 资源管控的对撞测试以及最佳实践架构
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现