题目链接: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. Git忽略规则(.gitignore配置)不生效原因和解决

    问题: .gitignore中已经标明忽略的文件目录下的文件,git push的时候还会出现在push的目录中,或者用git status查看状态,想要忽略的文件还是显示被追踪状态. 原因是因为在gi ...

  2. Python-rediscluster客户端

    # -*- coding: UTF-8 -*- import redis import sys from rediscluster import StrictRedisCluster #host = ...

  3. Java中间件之RMI及实例介绍 · zijian's blog

    RMI介绍   远程方法调用(Remote Method Invocation)是Sun公司规定的允许在不同的JAVA虚拟机之间进行对象间通信的一种规范.在RMI中,JVM可以位于一个或多个计算机上, ...

  4. Hexo next主题安装algolia

    一直在使用hexo写自己的博客,最近博客刚刚搬家重新搞了下博客: 1.为hexo添加站内搜索 我用的是algolia,在next主题5.x以上的版本集成了algolia站内搜索功能,我们只需要简单的配 ...

  5. sublime安装vue插件

    1.打开sublime text 3按 Ctrl+Shift+P(相信你有单身的手速,同时按完这3个键) 2.选中上图中,框出来的内容,按下enter. 3.选择上图的第二个即:vue syntax ...

  6. Linux系统发行版本及其区别

    1 Linux系统组成 Linux操作系统=Linux内核+GNU软件及系统软件+必要的应用程序.下表为Linux系统各组成部分的贡献人员: Linux内核 GNU组件(gcc.bash) 其他必要应 ...

  7. Java入门教程四(字符串处理)

    Java 语言的文本数据被保存为字符或字符串类型.字符及字符串的操作主要用到 String 类和 StringBuffer 类,如连接.修改.替换.比较和查找等. 定义字符串 直接定义字符串 直接定义 ...

  8. git上传命令步骤

    1.登陆github后,进入Github首页,点击New repository新建一个项目 2. 填写相应信息后点击create repository即可 Repository name: 仓库名称( ...

  9. 7-8 jmu-python-从列表中删除元素 (15 分)

    删除列表中所有符合条件的值. 输入格式: 输入n,代表要测试n次.每次测试:首先,输入1行字符串(字符串内的元素使用空格分隔)然后,输入要删除的元素x. 输出格式: 输出删除元素x后的每行字符串.如果 ...

  10. [面试专题]Web缓存详解

    Web缓存详解 标签(空格分隔): 缓存 缓存之于性能优化 请求更快:通过将内容缓存在本地浏览器或距离最近的缓存服务器(如CDN),在不影响网站交互的前提下可以大大加快网站加载速度. 降低服务器压力: ...