问题 E: 古希腊之争(一)(bfs迷宫裸模板)
时间限制: 1 Sec 内存限制: 128 MB
提交: 138 解决: 52
[提交] [状态] [讨论版] [命题人:外部导入]
题目描述
伯罗奔尼撒战争是以雅典为首的提洛同盟与以斯巴达为首的伯罗奔尼撒联盟之间的一场战争。这场战争从前431年一直持续到前404年,使得绝大多数周边城邦必须加入其中一方的阵营。战争第一阶段(BC431-BC421),雅典在伯里克利的领导之下,凭借强大的海军,采取陆地上防御在海上进攻的策略。而斯巴达在阿基达摩斯二世的领导之下,率领它令人畏惧的战士进行陆地强攻。两个强邦侧重点不同的军事力量导致了战争第一阶段的僵持局面。
话说,有一天阿基达摩斯二世决定率兵进攻雅典的一个居民点阿提卡,当他们满怀斗志的奔向阿提卡的时候,殊不知他们正走向伯利克里所设下的迷宫陷阱之中。当他们发现时,已为时已晚。
As you know, the Magpie Festival is comging!
为了早日返回斯巴达,阿基达摩斯二世立即让所有的斯巴达勇士去需找迷宫的出口E。现在他们被困在迷宫的S点,迷宫中“.”表示空地,可以通过,“#”表示墙,不能通过,每次只能向上下左右四个方向移动,每移动一个单位距离需要耗费一个单位时间,所有斯巴达勇士的移动速度相同。现在请你计算一下他们最短需要多少时间才能找到迷宫的出口。
PS:假设迷宫中每个点可以容纳的人数没有限制,每个斯巴达勇士的行动方向之间没有影响。
输入
第一行有一个整数t(0=<t<=100),代表有t组测试数据。
每组测试数据第一行输入三个数n,m, c,(2=<m<=n<=500,100=<c<=10000)分别代表迷宫的长度和宽度,以及被困迷宫的斯巴达勇士数(不包括阿基达摩斯二世)。下面m行每行有n个字符用来表示迷宫地图。详细输入格式见样例。
输出
输出一个整数,表示找到迷宫出口的最短时间,每组输出占一行。如不能找到出口输入-1
样例输入
1 5 5 100 ##### #S..# #...# #...E #####
样例输出
5
这题裸的,下一题有点改模板
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<queue>
#define INF 10000000
using namespace std;
typedef pair<int,int> P; //结构体状态,表示该点的坐标
int n,m,k;
int dp[505][505]; //表示起点到其他点的距离
char c[505][505]; //迷宫
int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
int sx,sy,gx,gy;
int bfs()
{queue<P> que;//创建一个里面是结构体的队列//所有的位置初始化为INFfor(int i=0;i<n;i++)for(int j=0;j<m;j++)dp[i][j]=INF;//从起点开始寻找,所以将起点坐标添加到队列中que.push(P(sx,sy));//将该位置初始化为0dp[sx][sy]=0;while(que.size()){//从队列的最前端去除元素P p=que.front();que.pop();//如果取出的状态是终点,结束遍历if(p.first==gx && p.second == gy)break;//四个方向循环for(int i=0;i<4;i++){//移动之后的坐标nx,nyint nx=p.first+dx[i],ny=p.second+dy[i]; //判断是否可以移动,以及是否访问过if(nx>=0 && nx<n && ny>=0 && ny<m && c[nx][ny]!='#' && dp[nx][ny]==INF){//如果可以访问的话,添加到队列中,并且到该位置的距离为到p的距离+1que.push(P(nx,ny));dp[nx][ny]=dp[p.first][p.second]+1;}}}return dp[gx][gy];
}
int main()
{int t;while(scanf("%d",&t)!=EOF){scanf("%d%d%d", &n, &m, &k);getchar(); //吸收换行符for(int i=0;i<n;i++){for(int j=0;j<m;j++){scanf("%c",&c[i][j]);if(c[i][j]=='S'){ //记录起始点sx=i;sy=j;}if(c[i][j]=='E'){ //记录终点gx=i;gy=j;}}getchar(); //吸收换行符}int res=bfs();if(res==INF)printf("-1\n");else {printf("%d\n",res);}}return 0;
}
问题 E: 古希腊之争(一)(bfs迷宫裸模板)相关推荐
- BFS【古希腊之争(二)】(bfs+优先队列)
题目描述 话说,年轻的斯巴达勇士们终于走出迷宫,取得胜利并顺利赶了回来.可是等他们回到斯巴达的时候才发现,雅典人趁他们不在偷袭了城邦,并抓走了他们的爱人.侥幸逃出来的几个人说,她们被关押在一个迷宫的牢 ...
- bfs迷宫寻路问题(一看就懂的讲解)
bfs迷宫问题讲解 广度优先搜索解决迷宫寻路问题 一.问题概述 二.问题分析 (一).手动模拟 (二).如何用计算机来解决 (1).地图表示 (2).如何找通路 (3).==如何找最短路(难点)== ...
- CF_329_B----AcWing_3825_逃离大森林(BFS究极模板)
原题链接:https://www.acwing.com/problem/content/3828/ 你是一个宝可梦饲养员,你正在进行你的冒险之旅. 当前,你的目标是逃离飞鸟森林. 飞鸟森林可以表示为一 ...
- BFS【古希腊之争(二)】
题目描述 话说,年轻的斯巴达勇士们终于走出迷宫,取得胜利并顺利赶了回来.可是等他们回到斯巴达的时候才发现,雅典人趁他们不在偷袭了城邦,并抓走了他们的爱人.侥幸逃出来的几个人说,她们被关押在一个迷宫的牢 ...
- BFS迷宫问题模型(具体模拟过程见《啊哈算法》)
题目描述与DFS模型走迷宫那篇一样.小哈被困在迷宫里,小哼解救小哈. 这里用BFS来写.BFS(广搜)与DFS(深搜)的区别就在于,DFS是"不撞南墙不回头",一条路走到不能再走之 ...
- java bfs 迷宫例子_51-迷宫(一)- java版dfs和bfs
一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道. 看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头君是否有可以逃出去的路. 输入格式 第一行输入两个整数 nn ...
- 【算法设计与分析】HDU-1108 C++诡异的楼梯(BFS迷宫最短路径)
一.题目描述 Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里 ...
- 蓝桥杯 BFS 迷宫寻宝
问题描述 Problem Description 洪尼玛今天准备去寻宝,在一个n*n (n行, n列)的迷宫中,存在着一个入口.一些墙壁以及一个宝藏.由于迷宫是四连通的,即在迷宫中的一个位置,只能走到 ...
- [AcWing算法刷题]之DFS+BFS迷宫模板(简单)
题目来源: 题库 - AcWing 目录 DFS和BFS模板题目:迷宫类 机器人的运动范围 字母 迷宫 红与黑 棋盘问题 马走日 全球变暖 DFS综合类 乘积最大(提高课) 单词接龙(提高课) 取石 ...
最新文章
- 日期相减计算年_Excel教程:excel日期问题的小妙招
- linux 下解压缩rar文件
- Python 技术篇-用flask服务实现mac本地文件上传至windows服务器指定文件夹下实例演示
- java命令依赖第三方jar原理_java命令执行带jar包依赖的文件执行不了
- ueditor php版使用,ueditor 1.2.6 使用方法说明
- 订单操作-表结构分析与表创建
- c语言股票软件开发,一种使用Objcctivc语言开发的股票软件系统的制作方法
- 软件开发工具(第1章:绪论)
- 抓包,反抓包,反反抓包
- bzoj 1049: [HAOI2006]数字序列(DP+DP)
- python机器学习库sklearn——k均值聚类
- 【面试题14】调整数组顺序使奇数位于偶数前面
- 上海国拍服务器位置,上海国拍系统的重大漏洞
- sql服务器显示空白,sql服务器空白
- php chr 1,PHP chr()用法及代码示例
- 对 Python 代码使用的词语标记化器 tokenize,你懂了吗?【Python|标准库|tokenize】
- 【新书推荐】大唐的裂变(套装共5册)(王澄明等著)
- VC编程调用dxdiag生成XML文件,来获取系统配置情况
- 利用MATLAB画传递函数的奈奎斯特曲线
- 【流体机械原理及设计03】