hdu - 1240 Nightmare && hdu - 1253 胜利大逃亡(bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1240
开始没仔细看题,看懂了发现就是一个裸的bfs,注意坐标是三维的,然后每次可以扩展出6个方向。
第一维代表在第几层。后两维代表行和列。
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
struct point
{
int x,y,z,step;
bool operator < (const point a) const
{
return step>a.step;
}
};
point t,e;
int n;
char maze[][][];
int used[][][];
int dir[][]={{-,,},{,,},{,-,},{,,},{,,-},{,,}}; void bfs()
{
memset(used,,sizeof(used));
priority_queue<point>que;
que.push(t);
used[t.z][t.x][t.y]=;
while(!que.empty())
{
point s=que.top(); que.pop();
// printf("%d %d %d %d\n",s.z,s.x,s.y,s.step);
if(s.x==e.x&&s.y==e.y&&s.z==e.z) {printf("%d %d\n",n,s.step);return;}
for(int i=;i<;i++)
{
t.x=s.x+dir[i][],t.y=s.y+dir[i][],t.z=s.z+dir[i][];
if(t.x>=&&t.x<n&&t.y>=&&t.y<n&&t.z>=&&t.z<n&&maze[t.z][t.x][t.y]!='X'&&!used[t.z][t.x][t.y])
{
t.step=s.step+;
used[t.z][t.x][t.y]=;
que.push(t);
}
}
}
printf("NO ROUTE\n");
}
int main()
{
// freopen("a.txt","r",stdin);
char s[];
while(~scanf("%s",s))
{
scanf("%d",&n);
for(int i=;i<n;i++)
for(int j=;j<n;j++)
scanf("%s",maze[i][j]);
scanf("%d%d%d",&t.y,&t.x,&t.z);
t.step=;
scanf("%d%d%d",&e.y,&e.x,&e.z);
scanf("%s",s);
bfs();
}
return ;
}
http://acm.hdu.edu.cn/showproblem.php?pid=1253
这题用优先队列是超时的,普通队列可以过。
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
struct point
{
int x,y,z,time;
}s,e;
int maze[][][];
int dir[][]= {{-,,},{,,},{,-,},{,,},{,,-},{,,}}; int main()
{
//freopen("a.txt","r",stdin);
int d,flag;
int a,b,c,t;
queue<point>que;
scanf("%d",&d);
while(d--)
{
scanf("%d%d%d%d",&a,&b,&c,&t);
for(int i=; i<a; i++)
for(int j=; j<b; j++)
for(int k=; k<c; k++)
scanf("%d",&maze[i][j][k]);
while(!que.empty()) que.pop();
s.x=,s.y=,s.z=,s.time=;
flag=;
que.push(s);
maze[s.z][s.x][s.y]=;
while(!que.empty())
{
e=que.front();
que.pop();
//printf("%d %d %d %d\n",e.z,e.x,e.y,e.time);
if(e.z==a-&&e.x==b-&&e.y==c-&&e.time<=t)
{
printf("%d\n",e.time);
flag=;
break;
}
for(int i=; i<; i++)
{
s.x=e.x+dir[i][];
s.y=e.y+dir[i][];
s.z=e.z+dir[i][];
if(s.z>=&&s.z<a&&s.x>=&&s.x<b&&s.y>=&&s.y<c&&maze[s.z][s.x][s.y]!=)
{
s.time=e.time+;
if(s.time<=t)
{
maze[s.z][s.x][s.y]=;
que.push(s);
}
}
}
}
if(!flag) printf("-1\n");
}
return ;
}
hdu - 1240 Nightmare && hdu - 1253 胜利大逃亡(bfs)的更多相关文章
- HDU 1253 胜利大逃亡(BFS)
题目链接 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会.魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A ...
- hdu 1253:胜利大逃亡(基础广搜BFS)
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- HDU 1253 胜利大逃亡 NYOJ 523【BFS】
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- HDU 1253 胜利大逃亡 题解
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- hdu 1253 胜利大逃亡 (三维简单bfs+剪枝)
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- [ACM] hdu 1253 胜利大逃亡 (三维BFS)
胜利大逃亡 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这但是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,能够被表示 ...
- hdu 1253 胜利大逃亡 (代码详解)解题报告
胜利大逃亡 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示 ...
- hdoj 1253 胜利大逃亡
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- HDOJ1253 胜利大逃亡 BFS
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
随机推荐
- cf 496B Secret Combination
题目链接:B. Secret Combination You got a box with a combination lock. The lock has a display showing n d ...
- 【BZOJ】【4010】【HNOI2015】菜肴制作
拓扑排序 这题是要求N个点的一个拓扑序,且满足以下条件:编号1的位置尽可能靠前,在此基础上编号2的位置尽可能靠前…… 我看到这题的第一感觉:将拓扑排序用的队列改为优先队列,编号越小越早出来. 但是连样 ...
- NYOJ-214 单调递增子序列(二) TLE 分类: NYOJ 2014-01-28 22:57 171人阅读 评论(0) 收藏
#include<stdio.h> #include<stdlib.h> #define max(x,y) x>y?x:y #define MAXX 100005 int ...
- C#简单windows服务
因为做后台比较多,所以经常需要写一些后台服务.一般的流程是先创建一个服务项目,加入代码.然后打包一个安装程序或者直接用dos命令安装服务.下面是详细内容: 1. 创建windows服务项目. ...
- Oracle 时间处理(加减)
一. 类似SQL SERVER中DateAdd select sysdate,add_months(sysdate,12) from dual; --加1年 select sysdate ...
- Samy XSS Worm之源码讲解
说到Web安全和XSS跨站脚本技术,几乎所有的书都会提到Samy Worm,这是在2005年感染了mySpace社交网络上百万用户的蠕虫.正如Morris蠕虫是互联网第一个蠕虫, Samy Worm则 ...
- Yarn的服务库和事件库
对于生命周期较长的对象,YARN采用了基于服务对象管理模型对其进行管理. 该模型有一下特点: 每个被服务化的对象都分为4个状态 任何服务状态变化都可以触发另外一些动作 可以通过组合方式对任意服务进行组 ...
- 电信SDK Pay函数里面System.out.print 无输出消息
private void Pay(HashMap<String, String> payParams){ System.out.print("----------Pay Dian ...
- Win7无法使用VPN的原因与解决方法(一)
如果Windows 7不是通过正常安装途径的话,像Ghost错误.系统环境改变等,都有可能导致无法使用VPN,而且由于原因不同,给出的提示也不尽相同.实际上,万变不离其宗, VPN是要依靠Window ...
- 利用MariaDB Galera Cluster实现mariadb的多主复制
一.MariaDB Galera Cluster概要: .简述: MariaDB Galera Cluster 是一套在mysql innodb存储引擎上面实现multi-master及数据实时同步的 ...