逃离迷宫(BFS)题解
第1行为两个整数m, n (1 ≤ m, n ≤ 100),分别表示迷宫的行数和列数,接下来m行,每行包括n个字符,其中字符'.'表示该位置为空地,字符'*'表示该位置为障碍,输入数据中只有这两种字符,每组测试数据的最后一行为5个整数k, x1, y1, x2, y2 (1 ≤ k ≤ 10, 1 ≤ x1, x2 ≤ n, 1 ≤ y1, y2 ≤ m),其中k表示gloria最多能转的弯数,(x1, y1), (x2, y2)表示两个位置,其中x1,x2对应列,y1, y2对应行。
思路:
最难的是转弯的思考方法,本来想的是给设置一个结构体内的变量turn以1 2 3 4来设置方向,如果turn与上一个节点不同就说明转向。但是后来看别人的题解说是如果走,就一条路径走到底,并标记,如果继续走走到没有标记的点上就说明转弯了
还有,队列要初始化!!!因为这个一直WA,心态爆炸...
#include<stdio.h>
#include<string.h>
//#include<math.h>
#include<stdlib.h>
#include<queue>
#define N 105
using namespace std;
char map[N][N];
bool vis[N][N];
int ans,m,n,x1,x2,y1,y2,k,to[4][2]={{1,0},{-1,0},{0,-1},{0,1}};
struct node{
int x,y,t;
};
queue<node> q;
int bfs(){
int i;
node a,next,o;
a.x=x1,a.y=y1,a.t=-1;
q.push(a);
vis[x1][y1]=1;
while(!q.empty()){
a=q.front();
q.pop();
if(a.x==x2 && a.y==y2 && a.t<=k) return 1;
for(i=0;i<4;i++){
next.x=a.x+to[i][0];
next.y=a.y+to[i][1];
while(next.x>=1 && next.x<=n && next.y<=m && next.y>=1 && map[next.x][next.y]!='*'){
if(vis[next.x][next.y]==0){
next.t=a.t+1;
vis[next.x][next.y]=1;
q.push(next);
}
o.x=next.x+to[i][0];
o.y=next.y+to[i][1];
next=o;
}
}
}
return 0;
}
int main(){
int w,i,j;
scanf("%d",&w);
while(w--){
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++) scanf("%s",map[i]+1);
scanf("%d%d%d%d%d",&k,&y1,&x1,&y2,&x2);
while(!q.empty()) q.pop(); //注意要初始化
memset(vis,0,sizeof(vis));
ans=bfs();
if(ans) printf("yes\n");
else printf("no\n");
}
return 0;
}
逃离迷宫(BFS)题解的更多相关文章
- hdu 1728 逃离迷宫 (BFS)
逃离迷宫 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissi ...
- hdu 1728 逃离迷宫 bfs记转向
题链:http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Mem ...
- hdu 1728 逃离迷宫 bfs记步数
题链:http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Mem ...
- hdu_1728_逃离迷宫(bfs)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1728 题意:走迷宫,找最小的拐角 题解:对BFS有了新的理解,DFS+剪枝应该也能过,用BFS就要以拐 ...
- hdu1728 逃离迷宫bfs
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1728/ 关于广度优先搜索的第一篇题解.广度优先搜索,就是状态树的层次遍历,一层一层的搜索,直到搜索到目标状态为止 ...
- 杭电 逃离迷宫 BFS
给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位 ...
- HDU 1728 逃离迷宫 BFS题
题目描述:输入一个m*n的地图,地图上有两种点,一种是 . 表示这个点是空地,是可以走的,另一种是 * ,表示是墙,是不能走的,然后输入一个起点和一个终点,另外有一个k输入,现在要你确定能否在转k次弯 ...
- hdu 1728 逃离迷宫 BFS加优先队列 DFS()
http://acm.hdu.edu.cn/showproblem.php?pid=1728 题意就是能否在规定的转弯次数内从起点走到终点.刚走时那步方向不算. 只会bfs(),但想到这题需要记录转弯 ...
- HDU 1728:逃离迷宫(BFS)
http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有 ...
- 逃离迷宫(HDU 1728 BFS)
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- King's Quest---poj1904(连通图缩点)
题目链接:http://poj.org/problem?id=1904 题意:国王有n个儿子,每个儿子喜欢ki个女孩,国王想让王子与他喜欢的人结婚,就让巫师做一个列表出来,但是国王想知道王子能和哪些女 ...
- Freemarker简单用法
Freemarker 最简单的例子程序 freemarker-2.3.18.tar.gz http://cdnetworks-kr-1.dl.sourceforge.net/project/fre ...
- iOS入门怎样选择Swift和objective-c
版权声明:本文为博主原创文章,未经博主同意不得转载.博主微信:lofocus https://blog.csdn.net/cuibo1123/article/details/28261795 学oc吧 ...
- HTML5(字符标准,表单)
字符标准 <meta charset="utf-8"> 表单 1.HTML 表单用于搜集不同类型的用户输入. 实例——创建文本字段 <form action=&q ...
- Json和List的表示形式
JsonObject和List的表示形式 package payItem.test; import java.util.ArrayList; import java.util.List; import ...
- 版本 ------- 2017年最受开发者欢迎的10个Linux发行版
1.Arch Linux Arch Linux在安装过程中提供了强大的可定制选择,支持你下载和安装自己所需的程序包.虽然这个选择对新手来说没有多大的帮助,但是它确实能够帮助那些使用Arch构建系统和存 ...
- TSNE数据降维学习【转载】
转自:https://blog.csdn.net/u012162613/article/details/45920827 https://www.jianshu.com/p/d6e7083d7d61 ...
- .net MVC 下拉多级联动及编辑
多级联动实现,附源码.当前,部分代码是参与博客园其它网友. 新增,前台代码: <script src="~/Scripts/jquery-1.10.2.js">< ...
- DevExpress使用技巧总结
DevExpress是非常主流的.NET控件,目前全世界和中国都用很多用户使用,不过由于是英文版,初次接触的同学可能会觉得困难,这里就总结DevExpress常见的10个使用技巧. 1.TextEdi ...
- yii2 restful api——app接口编程实例
<?php namespace common\components; use common\models\Cart; use common\models\User; use Yii; use y ...