【ybt1252】走迷宫
(还是蛮经典的一道bfs)
显然算法bfs
算法基本上算是bfs的模板了,(模板详见【新知识】队列&bfs【洛谷p1996约瑟夫问题&洛谷p1451求细胞数量】)
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
int r,c;
char a1[];
bool vis[][];//用来存储是否走过(显然第一遍走过时用的步数最小qwq)
int a[][];//存map
int dx[]={,,-,};
int dy[]={,,,-};//每一步可以走的四个方向
struct amazing{
int x,y;
int ans;
};//结构体,ans存的是到达这一个点的最小步数qwq
amazing fz(int x,int y,int z){
amazing rtn;
rtn.x=x;
rtn.y=y;
rtn.ans=z;
return rtn;
}//一个类似于构造函数的fz函数
bool pan(int x,int y){
return x>=&&x<=r&&y>=&&y<=c&&vis[x][y]==&&a[x][y]==;
}//判断是否满足可以走的条件
queue<amazing> q;
int main(){
scanf("%d%d",&r,&c);
for(int i=;i<=r;i++){
scanf("%s",a1);
for(int j=;j<=c;j++){
if(a1[j-]=='.')
a[i][j]=;
if(a1[j-]=='#')
a[i][j]=;
}//把地图构造成01型
}
q.push(fz(,,));//把第一步也就是起点入队
vis[][]=;
while(!q.empty()){//bfs模板
amazing h=q.front();
q.pop();
for(int i=;i<;i++){
int xx=h.x,yy=h.y,ans=h.ans;//这里之前踩过坑qwq,一定要定义在循环里这一句,要不然会炸
if(pan(xx+dx[i],yy+dy[i])){
xx+=dx[i];
yy+=dy[i];
vis[xx][yy]=;
q.push(fz(xx,yy,ans+));//走出这一步,ans+1
}
if(xx==r&&yy==c){//判断到没到终点
cout<<ans+<<endl;//因为要算头尾,所以到终点后应输出ans+1
return ;
} } }
return ;
}
end-
【ybt1252】走迷宫的更多相关文章
- 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 注意每次清 ...
- P1238 走迷宫
原题链接 https://www.luogu.org/problemnew/show/P1238 为了巩固一下刚学习的广搜,练一下迷宫类型的题 不过这道题我用的深搜..... 看问题,我们就知道这道题 ...
- golang 实现广度优先算法(走迷宫)
maze.go package main import ( "fmt" "os" ) /** * 广度优先算法 */ /** * 从文件中读取数据 */ fun ...
- 洛谷P1238 走迷宫题解
题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...
随机推荐
- eslint的安装与使用
什么是 ESLint ESLint(中文站点)是一个开源的 JavaScript 代码检查工具,使用 Node.js 编写,由 Nicholas C. Zakas 于 2013 年 6 月创建.ESL ...
- 微信公众平台开发教程(一)_微信接入校验以及token获取
微信公众平台是运营者通过公众号为微信用户提供资讯和服务的平台,而公众平台开发接口则是提供服务的基础. 接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 ...
- RNA-seq workflow
SRAtoolkit download .fa http://www.genomicdataanalysis.com/genomicdatatype/rna-seq/
- python selenium 百度登录
from selenium import webdriver import time driver = webdriver.Chrome() driver.get("https://www. ...
- vue实现验证码倒计时60秒的具体代码
vue实现验证码倒计时60秒的具体代码 <span v-show="show" @click="getCode">获取验证码</span> ...
- Spring的事务
事务:事务指的是逻辑上的一组操作,这组操作要么都成功,要么都失败. Transaction事务的四大特性ACID: 1.Atomicity原子性 事务的操作要么都成功,要么都不做,只要有一个失败,就会 ...
- awk、sed、date命令使用
个人学习笔记总结 [root@a ~]# awk 'END{print NR}' c.txt #没错,这就是文件的行数,当然,这种统计方法不是linux下最快的,但也是一种思路3[root ...
- node离线版安装
1.下载 下载地址:https://nodejs.org/zh-cn/download/ 选择相应的版本下载 2.解压缩 将文件解压到要安装的位置,并新建两个目录 node-global :npm全局 ...
- 翻译 | Improving Distributional Similarity with Lessons Learned from Word Embeddings
翻译 | Improving Distributional Similarity with Lessons Learned from Word Embeddings 叶娜老师说:"读懂论文的 ...
- Exp2 后门原理与实践 20164303 景圣
Exp2 后门原理与实践 一.基础问题回答: 1.例举你能想到的一个后门进入到你系统中的可能方式? 答:在网上点击不安全的网页或链接. 2.例举你知道的后门如何启动起来(win及linux)的方式? ...