BFS 、DFS 解决迷宫入门问题
问题 B: 逃离迷宫二
时间限制: 1 Sec 内存限制: 128 MB
提交: 12 解决: 5
[提交][状态][讨论版]
题目描述
王子深爱着公主。但是一天,公主被妖怪抓走了,并且被关到了迷宫。经过了常人难以想像的努力,王子到了这个迷宫,但是迷宫太过复杂,王子想知道到底有没有路能通到公主的所在地,同时还要输出王子到公主的最短距离,机智的你一定能帮助他解决这个问题。
输入
输出
样例输入
#####
#G..#
###.#
#..W#
#####
样例输出
#include<stdio.h>
#include<malloc.h>
#include<string.h> char Graph [][];
int n,m,startx,starty;
int Dir [][] = {{,},{,},{-,},{,-}};
int Vis [][]; int Fit(int x , int y){
return ( x>= && x<= n && y>= && y<= m );
} int DFS (int x,int y){
int i;
Vis [x][y] = ;
for(i = ; i < ; i++ ){
int tmpx = x + Dir [i][];
int tmpy = y + Dir [i][]; if(Fit (tmpx , tmpy) && Graph [tmpx][tmpy] == 'G'){
return ;
} if(Fit (tmpx , tmpy) && Vis [tmpx][tmpy] == && Graph [tmpx][tmpy] == '.'){
if (DFS (tmpx ,tmpy)){
return ;
}
}
}
return ;
} int main(){
int i ,j ;
while(scanf("%d%d",&n,&m)!=EOF){
getchar(); for( i= ; i <= n ; i++ ){
for( j= ; j<=m ; j++ ){
Vis [i][j] = ;
scanf("%c", &Graph [i][j]);
if(Graph [i][j] == 'W'){
startx = i;
starty = j;
}
}
getchar();
} if(DFS(startx , starty)){
printf("Good life\n");
}
else{
printf("Mission Failed\n");
}
}
return ;
}
BFS代码:
#include<stdio.h>
#include<malloc.h>
#include<string.h> char Graph [][];//以二维数组记录图
int n,m,startx,starty;
int Dir [][] = {{,},{,},{-,},{,-}};//方向数组
int Vis [][];//记录是否已经访问过
int Dis [][];//记录遍历的层数 int Fit(int x , int y){//判断是否超出边界
return ( x>= && x<= n && y>= && y<= m );
} int BFS (int x , int y){
int queue[];
int i , head = , tail = ;//head指向队列头,tail指向队列尾 queue [tail++] = x ;
queue [tail++] = y ;
Vis [x][y] = ; while(head < tail){//当队列为空停止搜索
int nowx = queue [head++];//取出队首x元素
int nowy = queue [head++];//取出队首y元素 for(i = ; i < ; i++){
int tmpx = nowx + Dir [i][];
int tmpy = nowy + Dir [i][]; if(Fit (tmpx,tmpy) && Graph [tmpx][tmpy] == 'G'){
return Dis [nowx][nowy] + ;//返回值为当前层数
} if(Fit(tmpx ,tmpy) && Vis [tmpx][tmpy] == && Graph [tmpx][tmpy] == '.' ){
//如果下层没有超出界限,并且没有访问过,并且为合法路径,则继续走下去
Dis [tmpx][tmpy] = Dis [nowx][nowy] + ;
Vis [tmpx][tmpy] = ; queue [tail++] = tmpx;
queue [tail++] = tmpy;
}
}
}
return ;//如果出不了迷宫,则返回为0
} int main(){
int i ,j ;
while(scanf("%d%d",&n,&m)!=EOF){
getchar(); for( i= ; i <= n ; i++ ){
for( j= ; j <= m ; j++ ){
Vis [i][j] = ;
scanf("%c", &Graph [i][j]);
if(Graph [i][j] == 'W'){
startx = i;
starty = j;
}
}
getchar();
} int ans = ;
ans = BFS(startx , starty); if(ans)
printf("%d\n",ans);
else
printf("Mission Failed\n");
}
return ;
}
BFS 、DFS 解决迷宫入门问题的更多相关文章
- 算法基础③--DFS解决迷宫问题入门
迷宫问题 通过深度优先搜索(DFS)方法实现. 迷宫问题一 一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道. 看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头 ...
- HDU 2102 A计划(BFS/DFS走迷宫)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 有关dfs、bfs解决迷宫问题的个人见解
可以使用BFS或者DFS方法解决的迷宫问题! 题目如下: kotori在一个n*m迷宫里,迷宫的最外层被岩浆淹没,无法涉足,迷宫内有k个出口.kotori只能上下左右四个方向移动.她想知道有多少出口是 ...
- bfs,dfs区别
一般来说用DFS解决的问题都可以用BFS来解决. DFS(深搜的同时考虑回溯) bfs=队列,入队列,出队列:dfs=栈,压栈,出栈 bfs是按一层一层来访问的,所以适合有目标求最短路的步数,你想想层 ...
- 用深度优先搜索(DFS)解决多数图论问题
前言 本文大概是作者对图论大部分内容的分析和总结吧,\(\text{OI}\)和语文能力有限,且部分说明和推导可能有错误和不足,希望能指出. 创作本文是为了提供彼此学习交流的机会,也算是作者在忙碌的中 ...
- LeetCode:BFS/DFS
BFS/DFS 在树专题和回溯算法中其实已经涉及到了BFS和DFS算法,这里单独提出再进一步学习一下 BFS 广度优先遍历 Breadth-First-Search 这部分的内容也主要是学习了labu ...
- hdu 1312:Red and Black(DFS搜索,入门题)
Red and Black Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- POJ 2227 The Wedding Juicer (优先级队列+bfs+dfs)
思路描述来自:http://hi.baidu.com/perfectcai_/item/701f2efa460cedcb0dd1c820也可以参考黑书P89的积水. 题意:Farmer John有一个 ...
- 邻结矩阵的建立和 BFS,DFS;;
邻结矩阵比较简单,, 它的BFS,DFS, 两种遍历也比较简单,一个用队列, 一个用数组即可!!!但是邻接矩阵极其浪费空间,尤其是当它是一个稀疏矩阵的时候!!!-------------------- ...
随机推荐
- python自定义排序函数
Python内置的 sorted()函数可对list进行排序: >>>sorted([36, 5, 12, 9, 21]) [5, 9, 12, 21, 36] 但 sorted() ...
- verilog中读取文件中的字符串_modelsim高级仿真
今天给个程序大家玩玩.因为今天遇到一个问题,就是要向UART发送指令,指令非常多,都是字符串.一直copy 函数 UART ("COMM_1"); UART ("COM ...
- MVC-04 视图(1)
不可否认的,View应该是整个ASP.NET MVC项目开发过程中最花时间的部分,因为与显示逻辑相关的技术五花八门,你可能要学习的有HTML.CSS.JavaScript.DOM.JQuery.JSO ...
- perl unicode utf-8 \x转换
[root@dr-mysql01 ~]# cat x5.pl use Encode; use JSON; use URI::Escape; use LWP::Simple; my $host = &q ...
- Cow Acrobats(贪心)
Cow Acrobats Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3686 Accepted: 1428 Desc ...
- 飘逸的python - 一个最简单的服务器
python拥有这种单独起一个服务器监听端口的能力,用标准库的wsgiref就行. from wsgiref.simple_server import make_server def simple_a ...
- javaweb学习路之四--cxf发布Webservice
背景:maven构建的springMvc+mybatis框架 源码--->https://github.com/Zering/MyWeb 步骤:(本步骤是自己在实际探索过程中的步骤,我的思路是先 ...
- [译]Stairway to Integration Services Level 4 - 增量更新数据
在本文中, 我们说下增量更新数据:即将数据源中更新了的数据替换掉目标表中对应的数据. 更新代码 操作之前我们先把目标表e (dbo.Contact). 的数据改掉 Use AdventureWorks ...
- JavaBean的一个小例子
一.创建一个javaBean类: UseBean package com.oncall24h.ruchi; import java.io.Serializable; public class UseB ...
- ACE6.2.0文件/目录操作
文件读取.#include "ace/FILE_Connector.h"#include "ace/FILE_IO.h"void fileRW(){ACE_FI ...