我是靠谱客的博主 痴情电脑,最近开发中收集的这篇文章主要介绍ACM水题-Rescue LK(AC,迷宫问题,DFS求解),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Rescue LK

Time Limit:1000MS  Memory Limit:65536K
Total Submit:83 Accepted:42

Description

ziliang loves LK. But LK was kidnapped by Monster.oyy,and was put in a labyrinth.
After thousands of hard fighting, ziliang finally enter the labyrinth. He must find a way to rescue LK !!! He has a map of the labyrinth, but the puzzle is too complicated, that he need your help.

Input

Input has several case. Each case first give an n and m, that is the height and length of the labyrinth. Followed by the map. In the map, ‘#’ means the wall, ‘Z’ means the position of ziliang, ‘L’ means position of LK. The ‘.’ Means empty cells.
ziliang can only walk on empty cell,and can only go up,down,left,right. And n,m will be less than 50.

Output

If ziliang can reach LK, output “LK has a good life”
Else output “Mission Failed”

Sample Input

5 5
#####
#Z..#
###.#
#..L#
#####
7 7
#######
#Z....#
#####.#
#####.#
#..#..#
#L.####
#######

Sample Output

LK has a good life
Mission Failed

Source

GDUT Monthly 2007.11 by ziliang

 

 

 

/*	------------------------------------------------------------------------------------------
典型的迷宫问题:通常的做法,就是用栈、DFS这两种做法,不过归根到底其实也是一种,都是回溯而
已,栈与DFS的区别也就是递归与非递归而已。
大概想法:用DFS来进行路径探索。每探索一步可行,就设置标志已经走,一直走下去,直到找到终点
或者遇到不可行的格子为止。找到终点就返回1,遇到不可行就返回上一层,并重围走过的
格子,换一个方向这样。
状况:AC,0MS
----------------------------------------------------------------------------------------*/
#include<stdio.h>
char chMap[52][52] ;
const int nDir[4][2] = {{1,0},{0,1},{-1,0},{0,-1}} ;
//方向
int m = 0 ;
int n = 0 ;
int zX = 0 ;
//起点的X坐标
int zY = 0 ;
//起点的Y坐标
int DFS(int x,int y) ;
int main(void)
{
int i = 0 ;
int j = 0 ;
while(scanf("%d%d",&n,&m) != EOF)
{
getchar() ;
for(i = 0 ; i < n ; ++i)
{
for(j = 0 ; j < m ; ++j)
{
scanf("%c",&chMap[i][j]) ;
if('Z' == chMap[i][j])
{
zX = i ;
zY = j ;
}
}
getchar() ;
}
if(1 == DFS(zX,zY))
{
puts("LK has a good life") ;
}
else
{
puts("Mission Failed") ;
}
}
return 0 ;
}
int DFS(int x,int y)
{
int i = 0 ;
int j = 0 ;
if(x < 0 || y < 0 || x >= n || y >= m)
{
return 0 ;
}
for(i = 0 ; i < 4 ; ++i)
//换一个方向
{
if('L' == chMap[x+nDir[i][0]][y+nDir[i][1]])
{
return 1 ;
}
else if('.' == chMap[x+nDir[i][0]][y+nDir[i][1]])
{
chMap[x+nDir[i][0]][y+nDir[i][1]] = '#' ;
//如果格子可行,设置已经
if(1 == DFS(x+nDir[i][0],y+nDir[i][1]))
//设这个方向走下去
{
return 1 ;
}
chMap[x+nDir[i][0]][y+nDir[i][1]] = '.' ;
//重置原来的状态。
}
}
return 0 ;
}


 

最后

以上就是痴情电脑为你收集整理的ACM水题-Rescue LK(AC,迷宫问题,DFS求解)的全部内容,希望文章能够帮你解决ACM水题-Rescue LK(AC,迷宫问题,DFS求解)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部