zoukankan      html  css  js  c++  java
  • TZOJ 3305 Hero In Maze II(dfs)

    描述

    500年前,Jesse是我国最卓越的剑客。他英俊潇洒,而且机智过人^_^。
    突然有一天,Jesse心爱的公主被魔王困在了一个巨大的迷宫中。Jesse听说这个消息已经是两天以后了,他急忙赶到迷宫,开始到处寻找公主的下落。令人头痛的是,Jesse是个没什么方向感的人,因此,他在行走过程中,不能转太多弯了,否则他会晕倒的。 我们假定Jesse和公主所在的位置都是空地,初始时,Jesse所面向的方向未定,他可以选择4个方向的任何一个出发,而不算成一次转弯。希望你帮他判断一下他是否有机会找到心爱的公主。 

    输入

    题目包括多组测试数据.

    第1行为一个整数T(1 ≤ T≤ 100),表示测试数据的个数,接下来为T组测试数据.

    每组测试数据以两个整数N,M,K(1<=N, M≤100, 0<K<=10)开头,分别代表迷宫的高,长和Jesse最多能转的弯数,(紧接着有N行,M列字符,由".","*","P","S"组成。其中 
    "." 代表能够行走的空地。 
    "*" 代表墙壁,Jesse不能从此通过。 
    "P" 是公主所在的位置。 
    "S" 是Jesse的起始位置。 
    每个时间段里Jesse只能选择“上、下、左、右”任意一方向走一步。

    输出

    如果Jesse能在晕之前找到公主,输出“YES”,否则输出“NO”。

    样例输入

    2
    5 5 1
    P..**
    *.**.
    S....
    .....
    *....
    5 5 2
    P..**
    *.**.
    S....
    .....
    *....

    样例输出

    NO
    YES

    题解

    我们设置了四个方向,分别是0,1,2,3

    注意在深搜的同时,把初始方向设置为-1,初始转弯次数为-1

    这样在一开始进入深搜的时候,就可以将第一次的方向改变全部归0啦

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,k,flag,dir[4][2]={-1,0,0,-1,0,1,1,0};
    char G[105][105];
    void dfs(int x,int y,int d,int s)
    {
        if(flag||s>k)
            return;
        if(G[x][y]=='P')
        {
            flag=1;
            return;
        }
        G[x][y]='*';
        for(int i=0;i<4;i++)
        {
            int px=x+dir[i][0];
            int py=y+dir[i][1];
            if(px>=1&&px<=n&&py>=1&&py<=m&&G[px][py]!='*')
            {
                if(d==i)
                    dfs(px,py,d,s);
                else dfs(px,py,i,s+1);
            }
        }
        G[x][y]='.';
    }
    int main()
    {
        int i,j,t;
        cin>>t;
        while(t--)
        {
            cin>>n>>m>>k;
            flag=0;
            for(i=1;i<=n;i++)
                scanf("%s",G[i]+1);
            for(i=1;i<=n;i++)
                for(j=1;j<=m;j++)
                    if(G[i][j]=='S')
                        dfs(i,j,-1,-1);
            if(flag)
                printf("YES
    ");
            else printf("NO
    ");
        }
        return 0;
    }
  • 相关阅读:
    判断是否GUID (转载)
    解决升级至.net4后出现A potentially dangerous Request.Form value was detected from the client (转载)
    C#如何设置Listview的行高高度 转载
    mojoportal之使用tab标签
    C#Windows 服务制作安装删除. 用户注销后,程序继续运行 (转载)
    c# winforms TextBox的记忆功能
    C# 创建windows服务、socket通讯实例 (转载 )
    mojoportal中的模块映射
    winforms中限定上传文件类型
    [笔记]软核 固核 硬核的区别
  • 原文地址:https://www.cnblogs.com/kannyi/p/9014482.html
Copyright © 2011-2022 走看看