HDU 1010 Tempter of the Bone (DFS+奇偶剪枝)
来源:互联网 发布:淘宝摄影师需要助理嘛 编辑:程序博客网 时间:2024/06/06 08:42
Tempter of the Bone
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 107712 Accepted Submission(s): 29274
The maze was a rectangle with sizes N by M. There was a door in the maze. At the beginning, the door was closed and it would open at the T-th second for a short period of time (less than 1 second). Therefore the doggie had to arrive at the door on exactly the T-th second. In every second, he could move one block to one of the upper, lower, left and right neighboring blocks. Once he entered a block, the ground of this block would start to sink and disappear in the next second. He could not stay at one block for more than one second, nor could he move into a visited block. Can the poor doggie survive? Please help him.
'X': a block of wall, which the doggie cannot enter;
'S': the start point of the doggie;
'D': the Door; or
'.': an empty block.
The input is terminated with three 0's. This test case is not to be processed.
4 4 5S.X...X...XD....3 4 5S.X...X....D0 0 0
NOYES
开始没有留意到没走过一个地方,这个地方就会塌陷,用了BFS写,AC不了,找不出错打算用DFS写题了,写的过程中发现了BFS的错误点。
下面是DFS的AC代码:
#include<iostream>
#include<string.h>
#include<cstdio>
using namespace std;
char map[11][11];
char visited[11][11];
int n,m,t,flag,sx,sy,ex,ey,f;
int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
bool leagl(int x,int y)
{
if(x<1||y<1||x>n||y>m||map[x][y]=='X'||visited[x][y])
return false;
return true;
}
int abs(int x)
{
if(x>0) return x;
return -x;
}
void dfs(int x,int y,int d)
{
if(flag==1) return;
if(x==ex&&y==ey&&t==d)
{
cout<<"YES"<<endl;
flag=1;
return;
}
for(int i=0;i<4;i++)
{
int xx=dir[i][0]+x;
int yy=dir[i][1]+y;
if(leagl(xx,yy))
{
visited[xx][yy]=1;
dfs(xx,yy,d+1);
visited[xx][yy]=0;
}
}
}
int main()
{
while(cin>>n>>m>>t,n+m+t)
{
memset(visited,0,sizeof(visited));
memset(map,0,sizeof(map));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>map[i][j];
if(map[i][j]=='S')
{
sx=i;
sy=j;
map[i][j]='X';
}
if(map[i][j]=='D')
{
ex=i;
ey=j;
}
}
flag=0;
int t1=abs(sx-ex)+abs(sy-ey)-t;
if(t1>0||abs(t1)%2)
{
cout<<"NO"<<endl;
}
else
{
dfs(sx,sy,0);
if(!flag) cout<<"NO"<<endl;
}
}
return 0;
}
- HDU 1010 Tempter of the Bone - (DFS) 奇偶剪枝
- HDU 1010 Tempter of the Bone(DFS+奇偶剪枝)
- hdu 1010 Tempter of the Bone(dfs+奇偶剪枝)
- hdu 1010 Tempter of the Bone(dfs+奇偶剪枝)
- HDU--1010 -- Tempter of the Bone [DFS+经典奇偶剪枝]
- HDU 1010Tempter of the Bone(奇偶剪枝回溯dfs)
- Hdu 1010 Tempter of the Bone (DFS 经典奇偶剪枝)
- hdu 1010 Tempter of the Bone (dfs+奇偶剪枝)
- HDU 1010 Tempter of the Bone( DFS + 奇偶剪枝 )
- hdu 1010 Tempter of the Bone(dfs + 奇偶剪枝)
- HDU 1010 Tempter of the Bone ( dfs + 奇偶剪枝 )
- HDU 1010 Tempter of the Bone (DFS+奇偶剪枝)
- hdu 1010 Tempter of the Bone(DFS+奇偶剪枝)
- HDU 1010-Tempter of the Bone(DFS+奇偶剪枝)
- hdu 1010 Tempter of the Bone (dfs+奇偶剪枝)
- hdu 1010 Tempter of the Bone (dfs+奇偶剪枝)
- hdu 1010 Tempter of the Bone题解(dfs+奇偶剪枝)
- HDU 1010 -- Tempter of the Bone(dfs+奇偶剪枝)
- array_rand()随机返回取数组元素键名
- 线索二叉树
- L2-002. 链表去重-PAT团体程序设计天梯赛GPLT
- java编程300例:5.通过用户输入,友好打招呼
- HDU 5805 NanoApe Loves Sequence
- HDU 1010 Tempter of the Bone (DFS+奇偶剪枝)
- 虚拟机桥接、NAT、host-only的区别
- Fresco中的ImagePipeline
- 1032. Sharing (25)-PAT甲级真题
- Android中自定义组合控件
- hdu 5783——Divide the Sequence
- git管理项目 一些使用语句
- 简单hash[或者是哈希思想]
- Maven创建An internal error occurred during: "Retrieving archetypes:". Java heap space