题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1728/

关于广度优先搜索的第一篇题解。广度优先搜索,就是状态树的层次遍历,一层一层的搜索,直到搜索到目标状态为止。在扩展的过程中设定一种由上一层扩展到下一层的转化机制,将出现的新的状态放入队列之中,每次取出队首元素,大部分情况下bfs是用来搜索最优值的问题,优先队列的作用就是一旦搜索到目标状态,跟随的结果状态一定是最优的。为了避免重复相同的搜索,可设置访问记录。一般运用队列这种数据结构,使得最初搜索的状态在前,可以继续下一次搜索。

题目意思:给出地图,要求判断在最多k次转弯的条件下是否能够从一点都到另一点。写完记得检查变量的初始化。

代码如下:

 #include<bits/stdc++.h>
using namespace std;
typedef unsigned int ui;
typedef long long ll;
typedef unsigned long long ull;
#define pf printf
#define mem(a,b) memset(a,b,sizeof(a))
#define prime1 1e9+7
#define prime2 1e9+9
#define pi 3.14159265
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define scand(x) scanf("%llf",&x)
#define f(i,a,b) for(int i=a;i<=b;i++)
#define scan(a) scanf("%d",&a)
#define dbg(args) cout<<#args<<":"<<args<<endl;
#define inf 0x3f3f3f3f
#define maxn 105
#define maxm 2000010
int n,m,t,k;
int Map[maxn][maxn];
int sx,sy,tx,ty;
bool flag=false,vis[maxn][maxn];
int dir[][]={,,,-,,,-,};
struct node{
int x,y;
int step;
node(int x,int y,int step):x(x),y(y),step(step){};
node(){};
};
node cur,nxt;
void bfs()
{
queue<node>q;
node st(sx,sy,-);
q.push(st);
vis[sx][sy]=true;//标记该状态已经访问过
while(!q.empty())
{
cur=q.front();//获取队首结点
q.pop();//队首状态弹出
if(cur.x==tx&&cur.y==ty&&cur.step<=k)
{
// dbg(cur.step);
flag=true;
return;
}
f(i,,)
{
nxt=cur;
nxt.x+=dir[i][];
nxt.y+=dir[i][];
while(nxt.x>=&&nxt.x<n&&nxt.y>=&&nxt.y<m&&Map[nxt.x][nxt.y])//检查是否越界、可走
{
if(!vis[nxt.x][nxt.y])//只要没有访问过,那一定是经过转弯了的,我们设定一次朝着一个方向一直走到底
{
vis[nxt.x][nxt.y]=true;
nxt.step=cur.step+;
q.push(nxt);//合法状态入队
}
nxt.x+=dir[i][];
nxt.y+=dir[i][];//继续朝同一个方向走到底,这个方向上的step都是同一个值
}
}
}
}
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
std::ios::sync_with_stdio(false);
scan(t);
while(t--)
{
flag=false;
scan(n);
scan(m);
mem(Map,);
mem(vis,false);
char c;
f(i,,n-)
f(j,,m-)
{
scanf(" %c",&c);
if(c=='.')Map[i][j]=;
}
scanf("%d%d%d%d%d",&k,&sy,&sx,&ty,&tx);//注意数据的读入,行列不可错
sx--,sy--,tx--,ty--;
bfs();
if(flag)pf("yes\n");
else pf("no\n");
}
}

hdu1728 逃离迷宫bfs的更多相关文章

  1. hdu 1728 逃离迷宫 (BFS)

    逃离迷宫 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissi ...

  2. hdu 1728 逃离迷宫 bfs记转向

    题链:http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Mem ...

  3. Hdu1728 逃离迷宫 2017-01-17 10:56 81人阅读 评论(0) 收藏

    逃离迷宫 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissi ...

  4. DFS(5)——hdu1728逃离迷宫

    一.题目回顾 题目链接:逃离迷宫 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地 ...

  5. hdu 1728 逃离迷宫 bfs记步数

    题链:http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Mem ...

  6. hdu1728逃离迷宫 (利用最短路径思想+优先队列(BFS))

    Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有 ...

  7. hdu1728 逃离迷宫---转弯次数不超过k+BFS

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1728 题目大意: 给你一幅图,给出起点终点和最大转弯次数,判断是否能从起点到终点.'*'表示障碍物. ...

  8. hdu_1728_逃离迷宫(bfs)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1728 题意:走迷宫,找最小的拐角 题解:对BFS有了新的理解,DFS+剪枝应该也能过,用BFS就要以拐 ...

  9. hdu1728 逃离迷宫

    给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位 ...

随机推荐

  1. Android studio常用快捷键与设置

    1.格式化代码: 命令 快捷键 将代码合并成一行 Ctrl + Shift + J 格式化 Ctrl+Alt+L 2.API函数参数提示:双击选中所要提示的函数,再按F2即可显示函数的使用方法. 3. ...

  2. Gnu pgp加密解密

    在生成密钥的时候,无法生成足够多的随机数,提示“ Not enough random bytes available. Please do some other work to givethe OS ...

  3. SQL JOIN 和 UNION 用法

    1 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons, Orders WHERE Persons.Id_P ...

  4. Java里观察者模式(订阅发布模式)

    创建主题(Subject)接口 创建订阅者(Observer)接口 实现主题 实现观察者 测试 总结 在公司开发项目,如果碰到一些在特定条件下触发某些逻辑操作的功能的实现基本上都是用的定时器 比如用户 ...

  5. kali pinyin

    重装了kali,原来一直用的ibus pinyin重装之后再apt-get install的时候总是找不到包,换了各种源都不行,纠结N久果断换别的输入法了. apt-get install fcitx ...

  6. Jprofile解析dump文件使用详解

    1 Jprofile简介 官网 下载对应的系统版本即可 性能查看工具JProfiler,可用于查看java执行效率,查看线程状态,查看内存占用与内存对象,还可以分析dump日志. 2 功能简介 选择a ...

  7. 一起了解 .Net Foundation 项目 No.8

    .Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. IdentityModel ...

  8. React之mockjs+sass+生命周期函数

    mdn W3C标准网站 运行sass cnpm i -D node-sass-chokidar npm-run-all rem单位设置 <script> //rem单位设置 documen ...

  9. 嗨! Apriori算法

    Association Rule 一:项集和规则 1.1 认识名词: Association Rule : 关联规则 Frequent Itemsets : 频繁项集 Sequential Patte ...

  10. CMSampleBufferRef解析

    CMTime:64位的value,32位的scale, media的时间格式 CMVideoFormatDesc:video的格式,包括宽高.颜色空间.编码格式.SPS.PPS CVPixelBuff ...