周赛-mZY寻宝(bfs搜索)
问题 B: MZY寻宝
时间限制: 1 Sec 内存限制: 128 MB
提交: 149 解决: 46
[提交][状态][讨论版]
题目描述
贪心的MZY去一个迷宫寻宝。已知:若MZY在位置(x, y),他下一次只能移动到(x-1, y)、(x+1, y)、(x, y-1)、(x, y+1)四个位置中的任一个(前提不能越界)。
毕竟他不是我,我可以直接飞到宝物那里去。由于MZY比较笨拙,他移动一步需要1分钟。请你帮他算出找到宝物所需要花费的最少时间。
迷宫是一个N*M的地图,图中只有四个数字。
0:此处是空的,可以走
1:此处有障碍,不可以走
2:MZY起点
3:宝物位置(只有一个宝物)
题目保证CZY至少有一条路可以到达宝物位置。
输入
输入数据有多组。
每组以两个整数N和M开始,分别表示迷宫的行数和列数,接下来N行每行有M个数。(1 <= N, M <= 10)
输出
输出MZY找到宝物的最少需要花费的时间。(以秒为单位)
样例输入
2 2
0 2
1 3
样例输出
60
#include<stdio.h>
#include<queue>
#include<string.h>
#include<iostream>
using namespace std;
#define K 0xffffff
int ans[12][12],bj[12][12],mintu=K; //ans[12][12]用来构图,bj[12][12]标记走过的点;
int n,m,x2,y2,bx,by;
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
struct node{int x,y;int tim;
}a,temp;
int jdu(struct node temp){if(temp.x<0||temp.x>=n||temp.y<0||temp.y>=m) //判断是否越界 return 0;if(ans[temp.x][temp.y]==1||bj[temp.x][temp.y]==-1) //判断是否已走过或是否能走 return 0;return 1;
}
void bfs(int x1,int y1){int i;a.x=x1;a.y=y1;a.tim=0;memset(bj,0,sizeof(bj));queue<node>q;bj[a.x][a.y]=-1;q.push(a);while(!q.empty()){a=q.front();q.pop();for(i=0;i<4;i++){temp.x=a.x+dx[i];temp.y=a.y+dy[i];temp.tim=a.tim+1;if(jdu(temp)){if(temp.x==bx&&temp.y==by){if(mintu>temp.tim)mintu=temp.tim; //取最小步数; continue;}bj[temp.x][temp.y]=-1; //标记为走过的点; q.push(temp); }}}}
int main()
{int i,j;while(scanf("%d%d",&n,&m)!=EOF){memset(ans,0,sizeof(ans));memset(bj,0,sizeof(bj));mintu=K;for(i=0;i<n;i++){getchar();for(j=0;j<m;j++){scanf("%d",&ans[i][j]); //输入数据 if(ans[i][j]==2){x2=i;y2=j;} //记录起点 if(ans[i][j]==3){bx=i;by=j; //记录终点; }} }bfs(x2,y2);printf("%d\n",mintu*60);}return 0;
}
周赛-mZY寻宝(bfs搜索)相关推荐
- hiho_1139_二分+bfs搜索
题目 给定N个点和M条边,从点1出发,到达点T.寻找路径上边的个数小于等于K的路径,求出所有满足条件的路径中最长边长度的最小值. 题目链接:二分 最小化最大值,考虑采用二分搜索.对所有的边 ...
- java灌水bfs二叉树,二叉树的BFS搜索
本人需要阅读代码,如果觉得阅读困难可以一步到CSDN 代码中涉及到的通过先序遍历和中序遍历生成一条二叉树的算法,在本人的另一篇博客通过树的中序和先序遍历生成二叉树中进行了详细讲解. 广度优先搜索算法( ...
- 4. 对称飞行器 -- BFS搜索
对称飞行器 小强在玩一个走迷宫的游戏,他操控的人物现在位于迷宫的起点,他的目标是尽快的到达终点. 每一次他可以选择花费一个时间单位向上或向下或向左或向右走一格,或是使用自己的对称飞行器花费一个时间单位 ...
- 【CCCC】L3-008 喊山 (30分),BFS搜索最长路,水题
problem L3-008 喊山 (30分) 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出"喂-喂喂-喂喂喂--"的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中 ...
- 迷宫寻宝(宽度搜索)(C++)
迷宫寻宝 题目 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,不限时间和步数,当然也没有陷阱,请你判断他能不能顺利的得到宝藏. 输入 多组输入 每组测试数据的第一行包含了两个整数M ...
- HDU - 2612 Find a way(BFS搜索)
题目: 链接 思路: 用BFS分别以'Y'和'M'的位置为起点进行两次搜索,并把这两次的搜索结果在一个二维数组中保存下来,在对地图遍历遇到'@'更行最小值. PS: 如果用'Y'和'M'点分别去搜每个 ...
- ACM之八数码问题----BFS搜索----数独游戏的模拟(下)
题目描述;数独游戏的内核代码 八数码问题; 编号为1到8的8个正方形滑块被摆成3行3列;(有一个格子留空); 每次可以把与空格相邻的滑块(有公共边才算相邻)移到空格中; 而它原来的位置就成为了新的空格 ...
- (FZU-2285-迷宫寻宝)BFS最短路径问题
题目网址:http://acm.fzu.edu.cn/problem.php?pid=2285 Problem 2285 迷宫寻宝 Accept: 276 Submit: 1040 Time Limi ...
- 猎人抓兔子的bfs搜索解法
有五个山洞,一字排开,一只兔子住在某个洞,每天晚上会换住到相邻的洞中,一个猎人只能每天早上去一个洞,问怎样的检查序列能确保抓到兔子. 这个问题,可以说是一个智力题了,当然我的智力没有达标,所以没有想出 ...
- c++ bfs搜索详讲
文章目录 一.bfs是什么? 二.bfs怎么用? bfs模板 简单例题1 中等例题2 高等例题3 总结 一.bfs是什么? bfs,广度搜索优先,是层序遍历的一种使用 一般用来求没有边权的情况下的最短 ...
最新文章
- 分层条件关系网络在视频问答VideoQA中的应用:CVPR2020论文解析
- 给自己的程序添加BugReport
- python里的体格是啥r_numpy.数组形状(R,1)和(R,)之间的差异
- Linux内核中影响tcp三次握手的一些协议配置
- 成功解决ModuleNotFoundError: No module named 'keras_retinanet'
- 如何为MySQL选择更合适的数据类型
- Spring Data JPA初使用 *****重要********
- 前端学习(2604):增加响应头可以获取数据
- 6- vue django restful framework 打造生鲜超市 -完成商品列表页(下)
- 无线渗透----扫描附近WiFi(windows系统)
- PPT:PowerPoint to Flash SDK:SWF
- Pytorch Note40 词嵌入(word embedding)
- 【2021 第五届“达观杯” 基于大规模预训练模型的风险事件标签识别】1 初赛Rank12的总结与分析
- mt6355功率设计注意事项 [仅为mt6758]
- 霍夫丁不等式 Hoeffding inequality
- 课时23 递归:这帮小兔崽子
- svn客户端,重新输入用户名密码
- python五子棋实验报告_python实现五子棋游戏
- 网络安全数据集和开源工具
- 任务6:认知ATmega168PA最小工作系统