1097: Yuchang and Zixiang ‘s maze
Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 863 Solved: 149
 
Description
 
One day , Yuchang and Zixiang go out of school to find some thing interesting . But both of them is LuChi , so the miss the way easily .
“Where am I ? who am I ?” Yuchang says . “Who attack you? You must want to say .” Zixiang adds . “Don’t say that , how we get out there ? I want my mom 555555……” Yuchang started crying . Zixiang
 become very panic . He doesn’t know how to get out there.
 Now , they find they are in a N*M maze , they are at the (a,b) point , they know they want to go to the point (c,d) , they want to finish as soon as possible, so , could you help them ?
Same as other maze , there are some point has boom , means they can’t get the point . Give you N,M and Num (the number of points that have booms . ) , then , Num lines contains pairs (x,y) means
 point (x,y) have booms . then , one line contains a , b , c , d ,the begin and end point .
They can mov forward , back , left and right . And every move cost 1 second . Calculate how many seconds they need to get to the finish point .
 
Input
 
The first line contains tow numbers N,M (0 < x,y < 1000)means the size of the maze.
The second line contains a number Num (0 < N < X*Y), means the number of points which have booms .
Then next N lines each contain two numbers , xi,yi , means (xi,yi) has a boom .
 
Output
One line , contains one number , the time they cost .
    If they can’t get to the finish point , output -1 .
 
Sample Input
1000 1000 4
5 5
5 7
4 6
6 6 
1 1 5 6
 
Sample Output
-1
 

题目大意:
 
余昌和子巷的迷宫
时间限制:2秒 内存限制:128mb submit: 863 已解决:149
 
描述
一天,余昌和子巷走出学校,发现了一些有趣的事情。但他们两人都是陆驰,所以很容易错过的方式。
“我在哪儿?”我是谁?”“谁攻击你?你一定想说。”子巷补充道。“别说了,我们怎么出去的?”我要我妈妈555555……”余昌哭了起来。子巷变得非常恐慌。他不知道怎么出去。
现在,他们发现他们在一个N*M的迷宫中,他们在(a,b)点,他们知道他们想去(c,d)点,他们想尽快完成,所以,你能帮助他们吗?
和其他迷宫一样,有一些点有boom,意思是他们不能得到那个点。给出N M和Num(有障碍的点的数量),则Num行包含对(x,y)表示点(x,y)有障碍。然后,一行包含a、b、c、d、起点和终点。它们可以向前、向后、向左和向右移动。每一步花费1秒。计算他们到达终点需要多少秒。
 
输入
第一行包含两个数字N,M (0 < x,y < 1000)表示迷宫的大小。
第二行包含一个数字Num (0 < N < X*Y),表示具有障碍的点的数量。
然后接下来N行每一行包含两个数字,xi,yi ,表示(xi,yi) 有一个障碍。
 
输出
一行,包含一个数字,它们花费的时间。
如果不能到达终点,输出-1。
 
样例输入
1000 1000 4
5 5
5 7
4 6
6 6 
1 1 5 6
 
样例输出
-1
 
分析
典型的走迷宫问题
小地图(200*200一下)BFS、DFS都可以。大地图的话,因为信息量很大所以用不了DFS会妥妥地T掉,只能用BFS。
 #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的更多相关文章

  1. 深搜(DFS)广搜(BFS)详解

    图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...

  2. 【算法导论】图的广度优先搜索遍历(BFS)

    图的存储方法:邻接矩阵.邻接表 例如:有一个图如下所示(该图也作为程序的实例): 则上图用邻接矩阵可以表示为: 用邻接表可以表示如下: 邻接矩阵可以很容易的用二维数组表示,下面主要看看怎样构成邻接表: ...

  3. 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现

    1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...

  4. 【BZOJ5492】[HNOI2019]校园旅行(bfs)

    [HNOI2019]校园旅行(bfs) 题面 洛谷 题解 首先考虑暴力做法怎么做. 把所有可行的二元组全部丢进队列里,每次两个点分别向两侧拓展一个同色点,然后更新可行的情况. 这样子的复杂度是\(O( ...

  5. 深度优先搜索(DFS)和广度优先搜索(BFS)

    深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...

  6. 图的 储存 深度优先(DFS)广度优先(BFS)遍历

    图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...

  7. 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)

    一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...

  8. 层层递进——宽度优先搜索(BFS)

    问题引入 我们接着上次“解救小哈”的问题继续探索,不过这次是用宽度优先搜索(BFS). 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLian/p/74296 ...

  9. HDU.2612 Find a way (BFS)

    HDU.2612 Find a way (BFS) 题意分析 圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车.百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个...坤 ...

随机推荐

  1. NPOI 生成Excel

    private void btnSave_Click(object sender, EventArgs e) { ) != ".xls") { MessageBox.Show(&q ...

  2. Python之六:模块

    模块包含了大量的函数方法和变量,我们可以用下面的语句调用模块: import 模块名 这样我们就可以在后面的语句中使用模块中的函数或者变量了.调用时只需用    模块名.函数名的方式调用即可 from ...

  3. SVM-支持向量机(二)非线性SVM分类

    非线性SVM分类 尽管SVM分类器非常高效,并且在很多场景下都非常实用.但是很多数据集并不是可以线性可分的.一个处理非线性数据集的方法是增加更多的特征,例如多项式特征.在某些情况下,这样可以让数据集变 ...

  4. Babel 7 主要改变

    1.不支持Node:0.10,0.12,4,5版本 2.更换命名-@babel/xxx 3.移除以年份命名的presets,统一更换成@babel/preset-env 4.移除 ’Stage‘ pr ...

  5. 使用Vmware过程中,突然网络连接不上问题

    ###第一次的解决方法: 1.我一般过一段时间就会对虚拟机进行拍快照备份:在使用过程中,如果没有太大变化,恢复网络正常的快照一般是能解决问题的,但是要记得恢复快照之前要备份你已经修改过的所有东西,以防 ...

  6. sql 分组后查询出排序字段

    select  row_number() over(partition by  CODE order by SEQUENCE) as RowIndex  from Table 注:根据表的CODE 字 ...

  7. Pandownload---windows下几乎无敌的网盘下载神器

    近几天光顾着mac了,今天咱来聊聊Windows. 这个就不多说了,直接贴图. 网页版截图. 电脑版截图. 网页版2020.2.1的时候是失效的,别问我为什么不现在测试,用不着. 不用担心不知道密码, ...

  8. bat代码中判断 bat是否是以管理员权限运行,以及自动以管理员权限运行CMD BAT

    · bat 代码中判断bat是否是以管理员权限运行,以及自动以管理员权限运行CMD BAT 一.判断bat是否是以管理员权限运行 @echo off net.exe session >NUL & ...

  9. two pointers思想 ---- 利用两个i, j两个下标,同时对序列进行扫描,以O(n)复杂度解决问题的一种思想

    two pointers思想 ---- 利用两个i, j两个下标,同时对序列进行扫描,以O(n)复杂度解决问题的一种思想, 如果能用这种思想解决问题,那么会大大降低程序的复杂度. 两个利用这个思想的例 ...

  10. Computer Abstractions

    计算机系统结构的概述 (MOOC:计算机系统设计) 组成: 硬件:CPU +MM(主存)+I/O(输入/输出) 软件:系统软件+应用软件 层次结构: 发展简史: 第一代:真空管  ·ENIAC ·冯诺 ...