HDU - 1728 逃离迷宫 【BFS】
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=1728
思路
BFS
一开始 从开始位置 往四周走 如果能走的话 这个时候 转弯次数都是0
我们的标记不是简单的标记
我们给每个已经访问过的位置 第一次访问时 我们将此时的转弯次数 赋值给它
当下一次 有其他状态 又来访问的时候,我们判断一下 之前已经标记的转弯次数 是比当前的大于等于吗 如果是 那么这个点 就可以继续走下去 如果不是 目前的这个状态就可以不要 相当于剪枝了
有几个坑点
输入的时候 坐标是从1-N 1-M 的
然后输入起始坐标的时候,, x 代表列 y 代表行
AC代码
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>
#include<map>
#include<set>
#include<string>
#include<list>
#include<stack>
#include <queue>
#define CLR(a, b) memset(a, (b), sizeof(a))
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int maxn = 1e2 + 5;
int Move[4][2] = // up 0 down 1 left 2 right 3
{
-1, 0, // up
1, 0, // down
0,-1, // left
0, 1, // right
};
int n, m;
int G[maxn][maxn];
int v[maxn][maxn];
int sx, sy, ex, ey, limit;
int ans;
struct node
{
int x, y;
int step;
int dis;
};
bool ok(int x, int y, int step)
{
if (x < 0 || x >= n || y < 0 || y >= m || G[x][y] == 0 || v[x][y] < step)
return false;
return true;
}
void bfs()
{
queue <node> q;
node tmp;
tmp.step = 0;
v[sx][sy] = 1;
for (int i = 0; i < 4; i++)
{
tmp.x = sx + Move[i][0];
tmp.y = sy + Move[i][1];
tmp.dis = i;
if (ok(tmp.x, tmp.y, tmp.step))
{
q.push(tmp);
v[tmp.x][tmp.y] = tmp.step;
}
}
while (!q.empty())
{
node u = q.front(), V;
q.pop();
if (u.x == ex && u.y == ey)
{
if (u.step <= limit)
{
ans = 1;
return;
}
}
if (u.step > limit)
continue;
for (int i = 0; i < 4; i++)
{
V.x = u.x + Move[i][0];
V.y = u.y + Move[i][1];
if (u.dis != i)
V.step = u.step + 1;
else
V.step = u.step;
V.dis = i;
if (ok(V.x, V.y, V.step))
{
q.push(V);
v[V.x][V.y] = V.step;
}
}
}
}
void init()
{
CLR(G, 0);
CLR(v, 0x3f);
}
int main()
{
int t;
cin >> t;
while (t--)
{
init();
scanf("%d%d", &n, &m);
char c;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
scanf(" %c", &c);
if (c == '.')
G[i][j] = 1;
else
G[i][j] = 0;
}
}
scanf("%d%d%d%d%d", &limit, &sy, &sx, &ey, &ex);
sx--, sy--, ex--, ey--;
ans = 0;
bfs();
if (ans)
printf("yes\n");
else
printf("no\n");
}
}
HDU - 1728 逃离迷宫 【BFS】的更多相关文章
- 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)
逃离迷宫 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissi ...
- hdu 1728 逃离迷宫 BFS加优先队列 DFS()
http://acm.hdu.edu.cn/showproblem.php?pid=1728 题意就是能否在规定的转弯次数内从起点走到终点.刚走时那步方向不算. 只会bfs(),但想到这题需要记录转弯 ...
- HDU 1728 逃离迷宫 BFS题
题目描述:输入一个m*n的地图,地图上有两种点,一种是 . 表示这个点是空地,是可以走的,另一种是 * ,表示是墙,是不能走的,然后输入一个起点和一个终点,另外有一个k输入,现在要你确定能否在转k次弯 ...
- HDU 1728 逃离迷宫(DFS||BFS)
逃离迷宫 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可 ...
- HDU 1728 逃离迷宫(DFS)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1728 题目: 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) ...
- HDU 1728 逃离迷宫
[题目描述 - Problem Description] 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,glo ...
- HDU 1728 逃离迷宫(DFS经典题,比赛手残写废题)
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 1728:逃离迷宫(DFS,剪枝)
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- 【Django】01_创建一个简单的项目
1.创建Django项目 点击:file-->new project,出现下面的对话框.选择Django栏目,输入项目名称, 选择python解释器版本,点击create创建. Django将自 ...
- 简单的 nginx 多站点配置
测试环境:基于CentOS6.8 编译安装LNMP(http://www.cnblogs.com/afee666/p/6836161.html) 一 需求 在一个 VPS 主机上配置 web 服务器, ...
- Convolutional Patch Networks with Spatial Prior for Road Detection and Urban Scene Understanding
Convolutional Patch Networks with Spatial Prior for Road Detection and Urban Scene Understanding 深度学 ...
- Java Learning Path(三)过程篇
Java Learning Path(三)过程篇 每个人的学习方法是不同的,一个人的方法不见得适合另一个人,我只能是谈自己的学习方法.因为我学习Java是完全自学的,从来没有问过别人,所以学习的过程基 ...
- [转] 查看HDFS文件系统数据的三种方法
1.使用插件——Hadoop-Eclipse-Plugin此方法需要借助Eclipse,插件的安装及使用请参考博文使用Eclipse编译运行MapReduce程序_Hadoop2.6.0_Ubuntu ...
- Nginx日志配置与切割
访问日志主要记录客户端访问Nginx的每一个请求,格式可以自定义.通过访问日志,你可以得到用户地域来源.跳转来源.使用终端.某个URL访问量等相关信息. Nginx中访问日志相关指令主要有两条,一条是 ...
- VMWare Workstation和VMWare vSphere(转)
VMware workstation一定是安装在window操作系统上的. VMware vSphere可以直接安装在x86机器上,使这台机器完全虚拟化. VMware vSphere主要是企业级用户 ...
- 查找 TextBox 对象中非法数据的示例
private void GetErrors(StringBuilder sb, DependencyObject obj){ foreach (object child in LogicalTree ...
- mysql 不同库不同表字段数据复制
需求:把一个表某个字段内容复制到另一张表的某个字段. 实现sql语句1: UPDATE file_manager_folder f1 LEFT OUTER JOIN file_manager_fold ...
- Eclipse搭建C++开发环境
http://jingyan.baidu.com/article/456c463b67b4310a59314468.html