杭电OJ(HDOJ)1010题:Tempter of the Bone(DFS,迷宫求解)

题意:

一只狗为了一根骨头,陷入一个迷宫当中,必须要在时间T这一时刻逃到出口,走一步花一分钟,要刚好在T分钟到达出口。

给出三个整数:

n(1

m(1

t(0

n,m,t同时为0,GAME OVER!

入口是S,口是D,障碍物X。如果在T时刻到达D,输入YES,否则输出NO。

示例输入:

4 4 5

S.X.

..X.

..XD

....

3 4 5

S.X.

..X.

...D

0 0 0

示例输出:

NO

YES

解决方案:

一种迷宫求解,只可以上下左右行走,不可以左下,右下,左上,右上行走。图的深度优先搜索的算法,只是一个普通结点(非边缘点)有四个连接点。

注意:必须要在T时刻到达,不能小于等于T。红色标记代码

#include
using namespace std;
int n;//迷宫行数
int m;//迷宫列数
int t;//规定的分钟数
int flag[10][10];//用于标记格子是否被访问
char map[10][10];//地图
bool success;//标记出口是否找到
void Visit(int sX,int sY,int count)
{

    if(count>t)
        return ;
    else if(map[sX][sY]=='D'&&count==t)
    {
        success=true;
        return;
    }
    else if(map[sX][sY]=='.'||map[sX][sY]=='S')
    {

        flag[sX][sY]=1;
        if(sY+1=0&&flag[sX][sY-1]==0)  Visit(sX,sY-1,count+1);//向西(左)移动一格
        if(sX+1=0&&flag[sX-1][sY]==0)  Visit(sX-1,sY,count+1);//向北(上)移动一格
        flag[sX][sY]=0;
    }
}

int main()
{
    int i,j,sX,sY;
    while((cin>>n>>m>>t)&&(m+n+t))
    {
        for(i=0; i>map[i];
        success=false;
        for(i=0; i


你可能感兴趣的:(ACM,ACM)