(BFS)1097: Yuchang and Zixiang ‘s maze
#include<bits/stdc++.h>
using namespace std; const int maxn = ;
char maze[maxn][maxn]; //存储迷宫
int vis[maxn][maxn]; //存储是否访问过标记
int step[maxn][maxn]; //存储步数 int n, m; //m,n分别是迷宫的大小,在check中判断越界要使用,需要声明为全局变量 int Move[][] = {, , -, , , , , -}; //四个方向可走,使用for循环来对当前坐标进行上下左右移动 struct point //结构体存储x,y的坐标,结构体的对象放在队列中
{
int x, y;
} in, out, beg; int check(int x, int y)
{
if(vis[x][y] == && x >= && x <= n && y >= && y <= m && maze[x][y] != '#')
return ;
else
return ;
} int bfs()
{
memset(vis, , sizeof(vis)); //初始所有坐标的访问设置为0
memset(step, , sizeof(step)); //初始所有步数为0 vis[beg.x][beg.y] = ; //beg坐标点开始标记为1,表示已经访问
step[beg.x][beg.y] = ; //beg所在的坐标为第一个,步数为0 queue<point>q; q.push(beg); //开始的那个点进队 while(!q.empty())
{
out = q.front(); //out记住队头元素
q.pop();
for(int i = ; i < ; i++)
{
in.x = out.x + Move[i][]; //循环四次,in分别是队头元素的上、下、左、右邻接坐标点
in.y = out.y + Move[i][];
if(check(in.x, in.y)) //对in作是否访问过、越界、是否是障碍检查
{
if(maze[in.x][in.y] == 'E') //判断in是否是到达的坐标
{
return step[out.x][out.y] + ; //若到达,返回in前一个坐标的步数+1
}
q.push(in); //不是终点,继续将in进队
vis[in.x][in.y] = ;
step[in.x][in.y] = step[out.x][out.y] + ; // 将in的步数在它前一个坐标的步数+1
}
}
}
return -;
} int main()
{
while(~scanf("%d%d", &n, &m))
{
for(int i = ; i <= n; i++)
{
for(int j = ; j <= m; j++)
{
maze[i][j] = '.';
}
}
int t;
scanf("%d", &t);
while(t--)
{
int x, y;
scanf("%d%d", &x, &y);
maze[x][y] = '#'; //将障碍的坐标设置为#
}
int a, b, c, d;
scanf("%d%d%d%d", &a, &b, &c, &d);
if(a == c && b == d) //判断如果出发点和终点坐标一样,就直接输出0
{
printf("0\n");
}
else //否则进行广度搜索
{
maze[a][b] = 'S';
maze[c][d] = 'E';
for(int i = ; i <= n; i++)
{
for(int j = ; j <= m; j++)
{
if(maze[i][j] == 'S') // 找到起始点,将起始点的坐标存入结构体变量beg中
{
beg.x = i;
beg.y = j;
}
}
}
int ans = bfs();
printf("%d\n", ans);
}
}
return ;
}
(BFS)1097: Yuchang and Zixiang ‘s maze的更多相关文章
- 深搜(DFS)广搜(BFS)详解
图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...
- 【算法导论】图的广度优先搜索遍历(BFS)
图的存储方法:邻接矩阵.邻接表 例如:有一个图如下所示(该图也作为程序的实例): 则上图用邻接矩阵可以表示为: 用邻接表可以表示如下: 邻接矩阵可以很容易的用二维数组表示,下面主要看看怎样构成邻接表: ...
- 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现
1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...
- 【BZOJ5492】[HNOI2019]校园旅行(bfs)
[HNOI2019]校园旅行(bfs) 题面 洛谷 题解 首先考虑暴力做法怎么做. 把所有可行的二元组全部丢进队列里,每次两个点分别向两侧拓展一个同色点,然后更新可行的情况. 这样子的复杂度是\(O( ...
- 深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...
- 图的 储存 深度优先(DFS)广度优先(BFS)遍历
图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...
- 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)
一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...
- 层层递进——宽度优先搜索(BFS)
问题引入 我们接着上次“解救小哈”的问题继续探索,不过这次是用宽度优先搜索(BFS). 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLian/p/74296 ...
- HDU.2612 Find a way (BFS)
HDU.2612 Find a way (BFS) 题意分析 圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车.百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个...坤 ...
随机推荐
- 工作问题--------爬虫遇到requests.exceptions.ConnectionError: HTTPSConnectionPool Max retries exceeded
问题描述:爬取京东的网站,爬取一段时间后报错. 经过一番查询,发现该错误是因为如下: http的连接数超过最大限制,默认的情况下连接是Keep-alive的,所以这就导致了服务器保持了太多连接而不能再 ...
- 关闭Apache的目录浏览功能
一.默认情况 默认情况下,Apache的配置文件C:\web\apache2.4\conf/httpd.conf中有如下参数: 引用 <Directory "/var/www/html ...
- LED Holiday Light -holiday Light Inspection Implementation Recommendations
China LED Holiday Light Factory & Ninghai County Haohua Electronic Appliance Co., Ltd. pointed o ...
- [POI2006] SZK-Schools - 费用流
差不多就是个二分图带权匹配?(我还是敲费用流吧) 每个点向着自己能到的学校连边,费用按题意设定 跑最小费用最大流即可 #include <bits/stdc++.h> using name ...
- linq 查询-“必须是可缩小的节点”
出现此错误的情况 查询中先使用分组方法GroupBy()=>Select()=>OrderBy()=>ToList()(实现分组后排序) 解决方法: 排序OrderBy()应该放在S ...
- IDEA工具java开发之 运行与调试
一.运行项目 ◆右键运行 ◆菜单运行 ◆run窗口运行 ◆启动参数 作用:经常用在本地开发环境要去连测试的数据库的时候使用.正常的情况下是连开发环境的数据库的,但是有些情况是需要连测试数据库的.所以这 ...
- 0009 注册登录(第二步:获取短信接口access token)
1 在GeneralTools目录下创建一个常量文件Constants.py 获取短信验证之前需要申请腾讯云短信服务. """ 腾讯云短信相关常量 "" ...
- 在GPU上训练数据
在GPU上训练数据 模型搬到GPU上 数据搬到GPU上 损失函数计算搬到GPU上
- 题解【洛谷P5958】[POI2017]Sabotaż
题面 考虑树形 \(\text{DP}\). 设 \(dp_i\) 为使 \(i\) 变成叛徒的最大值,同时 \(dp_i\) 也是使 \(i\) 不变成叛徒的最小值. 然后考虑如何转移状态. 如果 ...
- 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)
我没有实现时间复杂度为O(n)的算法. 思路:从第一数开始,onelist[0]:onelist[0]+onelist[1]:这样依次推算出每个子数组的sum值.和max进行比较.最后得到max值. ...