hdu 1728:逃离迷宫(DFS,剪枝)
逃离迷宫
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 13562 Accepted Submission(s): 3221
第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对应行。
...**
*.**.
.....
.....
*.... ...**
*.**.
.....
.....
*....
#include <stdio.h>
#include <string.h>
#define inf 0x7fffffff
int m,n,k,x1,y1,x2,y2;
char a[][];
int w[][];
bool isv[][];
int dx[] = {,,,-};
int dy[] = {,,-,};
bool f;
bool judge(int x,int y)
{
if(x>m || x< || y>n || y<)
return true;
if(isv[x][y])
return true;
if(a[x][y] == '*')
return true;
return false;
}
void dfs(int cx,int cy,int d)
{
if(cx==x2 && cy==y2){
if(w[x2][y2]<=k)
f = true;
return ;
}
int i;
for(i=;i<;i++){
int nx = cx + dx[i];
int ny = cy + dy[i];
if(d!=i && w[cx][cy]==k) //如果与上一步的方向不同(也就是说这一步要转弯)而当前转弯次数已达允许的最大转弯次数k,则不可能
continue;
if(d != - && i != d && w[nx][ny] < w[cx][cy] + ) //主要剪枝。如果下一步原来存储的转弯次数比走这一步转弯用的次数还小,则,不走这一步
continue;
if(judge(nx,ny)) //判断可走否
continue;
w[nx][ny] = w[cx][cy];
if(d!=i)
w[nx][ny]++;
if(w[nx][ny]>k)
continue;
//可以走
isv[nx][ny] = true;
dfs(nx,ny,i);
isv[nx][ny] = false;
if(f) return ;
}
}
int main()
{
int i,j,T;
scanf("%d",&T);
while(T--){
f = false;
scanf("%d%d%*",&m,&n);
for(i=;i<=m;i++){ //输入地图
for(j=;j<=n;j++){
scanf("%c",&a[i][j]);
w[i][j] = inf;
}
scanf("%*");
}
scanf("%d%d%d%d%d",&k,&y1,&x1,&y2,&x2);
memset(isv,,sizeof(isv));
isv[x1][y1] = true;
w[x1][y1] = -;
dfs(x1,y1,-);
if(f)
printf("yes\n");
else
printf("no\n");
}
return ;
}
Freecode : www.cnblogs.com/yym2013
hdu 1728:逃离迷宫(DFS,剪枝)的更多相关文章
- HDU 1728 逃离迷宫(DFS经典题,比赛手残写废题)
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 1728 逃离迷宫(DFS||BFS)
逃离迷宫 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可 ...
- hdu 1728 逃离迷宫 [ dfs ]
传送门 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- 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 逃离迷宫(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 逃离迷宫 (BFS)
逃离迷宫 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissi ...
- hdu 1728 逃离迷宫(dFS+优先队列)
求转弯最少的走路方式!!!! #include<stdio.h> #include<string.h> #include<queue> using namespac ...
随机推荐
- 【2011图灵奖得主】我眼中的Judea Pearl
[2011图灵奖得主]我眼中的Judea Pearl 来源: 叶星遥的日志 2011年的图灵奖花落UCLA计算机系的Judea Pearl教授.图灵奖是计算领域的最高奖,由于近年来这个领域的兴盛也算是 ...
- go runtime scheduler
 http://www.slideshare.net/matthewrdale/demystifying-the-go-scheduler http://www.cs.columbia.edu/~a ...
- 新浪微博客户端(11)-自定义checkBox
在最后一个欢迎界面上添加一个CheckBox. // 2.添加4个UIImageView ; i < NEW_FEATURE_NUMS; i++) { UIImageView *imageVie ...
- Eclipse启动Tomcat,45S超时问题解决
在Eclipse中启动Tomcat服务器时,经常由于系统初始化项目多,导致出现45秒超时的Tomcat服务器启动错误. 以前我一般通过找到XML配置文件,将对应Timeout为45的值,修改为 ...
- 随鼠标移动的div
<html> <head> <style type='text/css'> #d{ border:1px solid green; width:90px; heig ...
- POJ 1191 棋盘分割
棋盘分割 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11213 Accepted: 3951 Description 将一个 ...
- Q1微信用户增长11% 微信生态圈逐渐完善
就在今天早些时候,腾讯公布了Q1财报,微信和手Q游戏收入达18亿元,微信用户环比增长11%,微信生态圈逐渐完善.和xmyanke一起来看看具体的财报数字分析. 微信和手Q游戏付费用户环比增长100%以 ...
- MySQL之aborted connections和aborted clients
影响Aborted_clients 值的可能是客户端连接异常关闭,或wait_timeout值过小. 最近线上遇到一个问题,接口日志发现有很多超时报错,根据日志定位到数据库实例之后发现一切正常,一般来 ...
- UIImage imageNamed和UIImage imageWithContentsOfFile区别
UIImage imageNamed和 [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageNam ...
- request-log-analyzer日志分析
(这些文章都是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) 日志分析是常见的工作,方法如下: 使用工具:request-log-analyzer安装:$ ...