HDU 1484 Basic wall maze (dfs + 记忆)
Basic wall maze
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 168 Accepted Submission(s): 52
Special Judge
1.a 6 by 6 grid of unit squares
2.3 walls of length between 1 and 6 which are placed either horizontally or vertically to separate squares
3.one start and one end marker
A maze may look like this:

You have to find a shortest path between the square with the start marker and the square with the end marker. Only moves between adjacent grid squares are allowed; adjacent means that the grid squares share an edge and are not separated by a wall. It is not
allowed to leave the grid.
and fifth lines specify the locations of the three walls. The location of a wall is specified by either the position of its left end point followed by the position of its right end point (in case of a horizontal wall) or the position of its upper end point
followed by the position of its lower end point (in case of a vertical wall). The position of a wall end point is given as the distance from the left side of the grid followed by the distance from the upper side of the grid.
You may assume that the three walls don't intersect with each other, although they may touch at some grid corner, and that the wall endpoints are on the grid. Moreover, there will always be a valid path from the start marker to the end marker. Note that the
sample input specifies the maze from the picture above.
The last test case is followed by a line containing two zeros.
There can be more than one shortest path, in this case you can print any of them.
1 6
2 6
0 0 1 0
1 5 1 6
1 5 3 5
0 0
NEEESWW
题意:给定一张地图。而且给定起点和终点,求起点到终点的最短距离,地图上有墙,与以往的题目不同的是,以往的题目障碍物都是在格子上。可是本题的障碍物墙是在格子与格子的边界线上,所以在输入的时候就要进行预处理下。将墙的位置转化为相邻格子的东西南北方向墙的状态,所以使用了一个3为数组来记录地图的信息map[x][y][0]-map[x][y][3] 分别表示坐标为x,y的格子的四个方向墙的情况,0为没墙。1为有墙,然后一个dfs找到最短路,以及每一个点的前驱节点,最后打印路径。代码中的凝视非常具体。题目本身非常easy。就是代码写起来有点麻烦。
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <stack> using namespace std; const int MAX = 9,limit = 6,INF = 1000;
const int dirx[4]={0,-1,0,1},diry[4]={1,0,-1,0}; //map[x][y][0]-map[x][y][3] 分别表示坐标为x,y的格子的四个方向墙的情况,0为没墙,1为有墙
int map[MAX][MAX][4];
//pre[x][y][0]用来记录x,y的前驱格子的x坐标,pre[x][y][1]用来记录x,y的前驱格子的y坐标
int dist[MAX][MAX],pre[MAX][MAX][2];
int sx,sy,ex,ey,pax,pay,pbx,pby;
stack<char> st; void init(){
int i,j; for(i=0;i<MAX;++i){
for(j=0;j<MAX;++j){
dist[i][j] = INF;
map[i][j][0] = map[i][j][1] = map[i][j][2] = map[i][j][3] = 0;
}
}
} void dfs(int x,int y,int cnt){ int i,tx,ty; for(i=0;i<4;++i){
if(map[x][y][i]==1)continue;
tx = x+dirx[i];
ty = y+diry[i];
if(tx<1 || ty<1 || tx>limit || ty>limit)continue;
if(cnt+1>dist[tx][ty])continue;
//更短就要更新,而且记录前驱
dist[tx][ty] = cnt;
pre[tx][ty][0] = x;
pre[tx][ty][1] = y;
dfs(tx,ty,cnt+1);
}
} void Path(){
int px,py,x,y; x = ex,y = ey;
px = pre[x][y][0];
py = pre[x][y][1]; while(1){
//推断方向
if(x==px){//x坐标同样看y坐标的情况
if(py<y)st.push('E');
else st.push('W');
}else{//y坐标同样看x坐标的情况
if(px<x)st.push('S');
else st.push('N');
}
if(px==sx && py==sy)break;
x = px;
y = py;
px = pre[x][y][0];
py = pre[x][y][1];
} while(!st.empty()){
printf("%c",st.top());
st.pop();
}
printf("\n");
} int main(){
//freopen("in.txt","r",stdin);
//(author : CSDN iaccepted)
int i,j;
while(scanf("%d %d",&sy,&sx)){
if(sx==0 && sy==0)break;
scanf("%d %d",&ey,&ex); init();
for(i=0;i<3;++i){
scanf("%d %d %d %d",&pay,&pax,&pby,&pbx);
if(pax==pbx){
for(j=pay+1;j<=pby;++j){
map[pax][j][3] = 1;
map[pax+1][j][1] = 1;
}
}else{
for(j=pax+1;j<=pbx;++j){
map[j][pby][0] = 1;
map[j][pby+1][2] = 1;
}
}
} dfs(sx,sy,0); Path();
} return 0;
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
HDU 1484 Basic wall maze (dfs + 记忆)的更多相关文章
- 【HDOJ】1484 Basic wall maze
BFS. /* 1484 */ #include <iostream> #include <queue> #include <string> #include &l ...
- poj-2935 BFS Basic Wall Maze
Basic Wall Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3384 Accepted: 1525 ...
- Basic Wall Maze
poj2935:http://poj.org/problem?id=2935 题意:在6*6的格子中,有一些,如果两个格子之间有墙的话,就不能直接相通,问最少要经过几步才能从起点走到终点.并且输出路径 ...
- poj 2935 Basic Wall Maze
是一个图论的基础搜索题- 没什么好说的就是搜索就好 主要是别把 代码写的太屎,错了不好找 #include<cstdio> #include<algorithm> #inclu ...
- 不要62 hdu 2089 dfs记忆化搜索
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意: 给你两个数作为一个闭区间的端点,求出该区间中不包含数字4和62的数的个数 思路: 数位dp中 ...
- HDU 1241 Oil Deposits --- 入门DFS
HDU 1241 题目大意:给定一块油田,求其连通块的数目.上下左右斜对角相邻的@属于同一个连通块. 解题思路:对每一个@进行dfs遍历并标记访问状态,一次dfs可以访问一个连通块,最后统计数量. / ...
- hdu 1241 Oil Deposits(DFS求连通块)
HDU 1241 Oil Deposits L -DFS Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & ...
- HDOJ(HDU).1258 Sum It Up (DFS)
HDOJ(HDU).1258 Sum It Up (DFS) [从零开始DFS(6)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双 ...
- HDOJ(HDU).1016 Prime Ring Problem (DFS)
HDOJ(HDU).1016 Prime Ring Problem (DFS) [从零开始DFS(3)] 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架 ...
随机推荐
- Java设计模式菜鸟系列(十四)代理模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39856435 代理模式(Proxy):代理模式事实上就是多一个代理类出来,替原对象进行一些 ...
- PHP获取表单方法
php接收HTML当表单提交的信息,数据将存储提交在全局阵列中,我们能够调用系统特定的自己主动全局变量数组来获取这些值.经常使用的自己主动全局变量例如以下所看到的: $_GET $_POST $_RE ...
- 建立ORACLE10G DATA GUARD--->Physical Standby
下面是我自己建Physical Standby,按照下面的步骤一步我一步,当然,打造成功,以下步骤可以作为建筑物Data Guard结构操作手册. HA和DG差额:HA:可以做IP切换自己主动 DG ...
- Maven+Spring
Maven+Spring 关于Maven Maven是一个用于项目构建的工具,通过它便捷的管理项目的生命周期.即项目的jar包依赖,开发,测试,发布打包. 做过.NET的人应该会联想到Nuget,是的 ...
- Linux
介绍了相关的文件夹
学习Linux,先了解Linux标准的文件夹结构是非常重要的,学习的一个很好的铺垫之后的行动.去罗列大而全的所有文件夹. 本文主要说明.笔者本人接触,须要了解的一些文件文件夹,当然本文也会不断的更新或 ...
- 金蝶K3管理软件PDA条码解决方式,盘点机与金蝶K3无缝对接
申明:以上文字为"武汉汉码科技有限公司"原创,转载时务必注明出处. 技术分享,沟通你我,共同进步!www.hanma-scan.com 原帖:http://www.hanma-sc ...
- hdu 5076 最小割灵活运用
这意味着更复杂的问题,关键的事实被抽象出来:每个点,能够赋予既有的值(挑两个一.需要选择,设定ai,bi). 寻找所有和最大.有条件:如果两个点同时满足: 1,:二进制只是有一个不同之处. 2:中的 ...
- 创建Windows类别
Windows在表单.控制.对话框基本上形成.Windows类是Windows形式的类型,可处理叙述性说明. 在Windows提前有很多定义Windows类别,但它可以很容易地创建自己的Windows ...
- 使用iframe从网页调起移动端应用
比如想在网页中调起支付宝,我们可以创建一个iframe,src为: alipayqr://platformapi/startapp?saId=10000007&clientVersion=3. ...
- GeeksforGeeks - Adjacency List邻接矩阵C\C++代码
邻接矩阵的图示: 构建一个这种无向邻接矩阵. 參考站点: http://www.geeksforgeeks.org/graph-and-its-representations/ 这里写了个类,添加删除 ...