ACWING 844. 走迷宫
地址 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 ;
}
ACWING 844. 走迷宫的更多相关文章
- 844. 走迷宫(bfs模板)
		
给定一个n*m的二维整数数组,用来表示一个迷宫,数组中只包含0或1,其中0表示可以走的路,1表示不可通过的墙壁. 最初,有一个人位于左上角(1, 1)处,已知该人每次可以向上.下.左.右任意一个方向移 ...
 - Acwing 844.裸迷宫
		
给定一个n*m的二维整数数组,用来表示一个迷宫,数组中只包含0或1,其中0表示可以走的路,1表示不可通过的墙壁. 最初,有一个人位于左上角(1, 1)处,已知该人每次可以向上.下.左.右任意一个方向移 ...
 - C语言动态走迷宫
		
曾经用C语言做过的动态走迷宫程序,先分享代码如下: 代码如下: //头文件 #include<stdio.h> #include<windows.h>//Sleep(500)函 ...
 - sdut 2449走迷宫【最简单的dfs应用】
		
走迷宫 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_ 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m) ...
 - 洛谷P1238 走迷宫
		
洛谷1238 走迷宫 题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个 ...
 - BZOJ 2707: [SDOI2012]走迷宫( tarjan + 高斯消元 )
		
数据范围太大不能直接高斯消元, tarjan缩点然后按拓扑逆序对每个强连通分量高斯消元就可以了. E(u) = 1 + Σ E(v) / degree(u) 对拍时发现网上2个程序的INF判断和我不一 ...
 - NYOJ306 走迷宫(dfs+二分搜索)
		
题目描写叙述 http://acm.nyist.net/JudgeOnline/problem.php?pid=306 Dr.Kong设计的机器人卡多非常爱玩.它经常偷偷跑出实验室,在某个游乐场玩之不 ...
 - Problem A: 走迷宫问题
		
Problem A: 走迷宫问题Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 9 Solved: 3[Submit][Status][Web Board] ...
 - BZOJ 2707: [SDOI2012]走迷宫 [高斯消元 scc缩点]
		
2707: [SDOI2012]走迷宫 题意:求s走到t期望步数,\(n \le 10^4\),保证\(|SCC| \le 100\) 求scc缩点,每个scc高斯消元,scc之间直接DP 注意每次清 ...
 
随机推荐
- Java生鲜电商平台-系统异常状态的设计与架构(APP应用或者生鲜小程序)
			
Java生鲜电商平台-系统异常状态的设计与架构 说明:在实际开发Java生鲜电商平台的时候,异常状态的设计关系着整体系统的性能问题,架构设计,以及稳定性方面,对此,我根据实际的业务场景,进行了系统设计 ...
 - springcloud~配置中心~对敏感信息加密
			
简介 RSA非对称加密有着非常强大的安全性,HTTPS的SSL加密就是使用这种方法进行HTTPS请求加密传输的.因为RSA算法会涉及Private Key和Public Key分别用来加密和解密,所以 ...
 - MySQL 排错-解决MySQL非聚合列未包含在GROUP BY子句报错问题
			
排错-解决MySQL非聚合列未包含在GROUP BY子句报错问题 By:授客 QQ:1033553122 测试环境 win10 MySQL 5.7 问题描述: 执行类似以下mysql查询, SEL ...
 - SQL实用技巧:如何分割字符串
			
create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20)) as beg ...
 - SQL server 安装成功到使用Sa SQL server验证登录等一系列问题
			
使用 Windows 身份验证方式登录 出现错误 无法连接到 本地服务器 解决问题: SQL server配置管理器:服务远程过程调用失败 https://blog.csdn.net/gfjjggg/ ...
 - C#中巧用妙法避免嵌套方式使用两个foreach循环
			
问题:需要对DataGridViewRow的下拉框列Item2所选内容进行判断,看是否跟数据库里面某个配置表的数据列Item1匹配.如果用两个foreach循环进行匹配,会导致逻辑复杂而且容易只bre ...
 - 初级模拟电路:3-11 BJT实现电流源
			
回到目录 1. 恒流源 (1)简易恒流源 用BJT晶体管可以构造一个简易的恒流源,实现电路如下: 图3-11.01 前面我们在射极放大电路的分压偏置时讲过,分压偏置具有非常好的稳定性,几乎不受晶体管的 ...
 - MAC下安装pomelo
			
配置:OS X 10.9.4 + Xcode 6.0 摘要:本文目标为成功运行pomelo的HelloWorld程序. 壹.| 安装必要项 一.安装Xcode及相关工具 1.安装Xcode. ...
 - 【机器学习基础】交叉熵(cross entropy)损失函数是凸函数吗?
			
之所以会有这个问题,是因为在学习 logistic regression 时,<统计机器学习>一书说它的负对数似然函数是凸函数,而 logistic regression 的负对数似然函数 ...
 - LNMP(5)
			
目录 一.实战 1.安装 安装nginx 数据库 php wordpress 2.三者建立联系 nginx和php建立联系 php与mariadb建立关系 二.数据分离 三.理论 静态和动态 web应 ...