逃离迷宫(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 ... 
随机推荐
- MySQL 如何删除有外键约束的表数据
			今天删除数据库中数据,提示因为设置了foreign key,无法修改删除 可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况. SET FOREIGN_KEY_CHECKS=0; 删除 ... 
- sql server字符串中怎么添加换行?
			换行/回车,可以使用CHAR函数处理,比如: 1 insert into tbtest (text) values ('abc' + char(13)+char(10) + 'def') 主要还是要看 ... 
- Lodash 中文文档 (v4.16.1) 手机版
			http://lodash.swift.ren/ 手机扫描二维码直接进入 
- 扩展的friend语法
			Java中没有定义friend. friend用于声明类的友元,可以无视类中成员的属性.无论成员3p中的哪一种,友元类或友元函数都可以访问,破坏了封装性,此关键字备受争议.专家会建议程序员使用get/ ... 
- slideUp() 函数
			<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ... 
- [LeetCode]94, 144, 145 Binary Tree InOrder, PreOrder, PostOrder Traversal_Medium
			Given a binary tree, return the inorder, preorder, postorder traversal of its nodes' values. Example ... 
- mysql事务详解
			事务的四大特性ACID如下: 原子性:事务中的所有操作,要么全部完成,要么不做任何操作,不能只做部分操作.如果在执行的过程中发了错误,要回滚(Rollback)到事务开始前的状态,就像这个 ... 
- webp格式
			有时候你右键保存了一张图片,然后好气啊,打不开.这要么是webp格式,要么,,,,要么有问题啊. WebP格式,谷歌大法开发的一种旨在加快图片加载速度的图片格式.图片压缩体积大约只有JPEG的2/3, ... 
- mac远程连接windows
			第一步:在Mac上安装Remote Desktop Connection 进入Microsoft Remote Desktop Connection下载安装包. 下载完成之后,双击安装包进行安装. 第 ... 
- 使用Jmeter测试Dubbo接口(参数设置篇)
			WebSocket接口需要下载dubbo插件才能使用 本次下载的版本为jmeter-plugins-dubbo-1.3.6,下载完成后jar文件放到\lib\ext目录下 由于工作需要,最近需要对du ... 
