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 ...
随机推荐
- CentOS 6.4 32位系统 LAMP(Apache+MySQL+PHP)安装步骤
先来解释一下,什么是 LAMP.正如标题所言,LAMP 实际上就是 Linux.Apache.MySQL.PHP 四个名称的缩写,当然最后一个 “P” 还有其他说法是 Perl 或者 Python.不 ...
- linux学习之用户管理
用户管理是在root用户下进行相关操作的 1.配置文件路径: 保存用户信息的文件:/etc/passwd 保存密码的文件:/etc/shadow 保存用 ...
- Redis Cluster 理论知识
http://www.ttlsa.com/redis/redis-cluster-theoretical-knowledge/ Redis 集群的 TCP 端口(Redis Cluster TCP p ...
- SSL协议运行机制
SSL/TLS协议运行机制 一.作用 不使用SSL/TLS的HTTP通信,就是不加密的通信.所有信息明文传播,带来了三大风险. (1) 窃听风险(eavesdropping):第三方可以获知通信内容. ...
- curl模拟post请求
1,curl -d "userType=seller&userId=1034285" "www.baidu.com/getInfo.php" curl ...
- 细说HTTP上篇
HTTP概述 每天,都有数以亿万计的JPEG图片.HTML页面.文本文件.MPEG电影.WAV音频文件.Java小程序和其他资源在因特网上游弋.HTTP可以从遍布全世界的Web服务器上将这些信息快速. ...
- 虚拟机里面安装Openfiler 2.99
简介 Openfiler 由rPath Linux驱动,它是一个基于浏览器的免费网络存储管理实用程序,可以在单一框架中提供基于文件的网络连接存储 (NAS) 和基于块的存储区域网 (SAN).Open ...
- index and polymorphic
http://guides.rubyonrails.org/association_basics.html#polymorphic-associations class CreateStars < ...
- Ubuntu 14.04/14.10下安装VMware Workstation 11图文教程
VMware workstation 是一个可以进行桌面操作的虚拟软件.它可以让我们在一台电脑或者虚拟机中运行多个虚拟机. 由VMware公司研发和维护.由于是商业软件,我们需要买他们家的许可证或者说 ...
- TCP同步与异步及阻塞模式,多线程+阻塞模式,非阻塞模式简单介绍
首先我简单介绍一下同步TCP编程 与异步TCP编程. 在服务端我们通常用一个TcpListener来监听一个IP和端口.客户端来一个请求的连接,在服务端可以用同步的方式来接收,也可以用异步的方式去接收 ...