首页 > 其他分享 >TZOJ 2777: Hero in Maze 简单版/深搜DFS

TZOJ 2777: Hero in Maze 简单版/深搜DFS

时间:2022-10-06 12:23:41浏览次数:40  
标签:Hero tx ty int DFS 2777 vis 公主 Jesse

描述

 

500年前,Jesse是我国最卓越的剑客。他英俊潇洒,而且机智过人^_^。

突然有一天,Jesse心爱的公主被魔王困在了一个巨大的迷宫中。Jesse听说这个消息已经是两天以后了,他急忙赶到迷宫,开始到处寻找公主的下落。

请你判断他是否能救出心爱的公主。(假设有路可以通到公主那就可以找到公主)。

 

输入

 

题目包括多组测试数据。
每组测试数据以两个整数n,m(0<n, m≤20)开头,分别代表迷宫的长和高。紧接着有m行,n列字符,由".","*","P","S"组成。其中
"." 代表能够行走的空地。
"*" 代表墙壁,Jesse不能从此通过。
"P" 是公主所在的位置。
"S" 是Jesse的起始位置。
Jesse只能选择上、下、左、右任意一方向走一步。
输入以0 0结束。

 

输出

如果能救出公主输出YES,否则输出NO。

样例输入

 

4 4
....
....
....
S**P
4 4
....
....
****
S**P
0 0

样例输出

 

YES
NO

提示

输入0 0结束可以这样,
参考:
while(scanf("%d %d",&n,&m),m||n)
{

}

#include<bits/stdc++.h>
using namespace std;
int n,m,f; //n行m列,f作为终点标记
int sx,sy,ex,ey;//起点终点坐标
int nex[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};//方向数组,右下左上
int vis[105][105]; //标记数组
char a[105][105]; //地图
void dfs(int x,int y); //声明dfs函数 
int main()
{
    while(cin>>m>>n) //多组数据输入
    {
        if(n==0&&m==0)break; //如果输入的n,m是0结束循环
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)//双重循环输入地图 
            {
                cin>>a[i][j]; //输入第i行第j列的字符
                if(a[i][j]=='S') //起点
                {
                    sx = i;sy = j;
                } 
                if(a[i][j]=='P') //终点 
                {
                    ex = i;ey = j;
                }
            } 
        memset(vis,0,sizeof(vis)); //初始化标记数组vis为0,表示整个地图没有走过
        f = 0; //初始化f
        dfs(sx,sy); //起点传入,开搜
        if(f==1) cout<<"YES"<<endl; //如果f执行完dfs为1,则找到了公主,输出yes 
        else cout<<"NO"<<endl; 
    } 
    return 0;
} 
void dfs(int x,int y)
{
    if(f==1)return; //如果f=1找到终点,直接返回程序 
    if(x==ex&&y==ey)
    {
        f = 1; //找到终点 
        return;
    }
    for(int i=0;i<4;i++) //循环4个方向
    {
        int tx = x + nex[i][0];
        int ty = y + nex[i][1]; //获取下一步的坐标tx,ty
        if(tx<1||tx>n||ty<1||ty>m)continue; //越界判断,判断tx,ty行列是否越界
        if(a[tx][ty]!='*' && vis[tx][ty]==0) //如果下一步不是*且vis数组没有标记过
        {
            vis[tx][ty] = 1; //vis数组标记1就证明该点走过
            dfs(tx,ty);//将tx,ty作为下一步的起点传入继续搜索 
        } 
    } 
} 

 

标签:Hero,tx,ty,int,DFS,2777,vis,公主,Jesse
From: https://www.cnblogs.com/jyssh/p/16757378.html

相关文章

  • 如何查看hive表在hdfs中的位置
    在hive环境下使用命令:hive>showdatabases;#查看所有的数据库OKappdevhive>usedev;#选择dev数据库OKhive>showcreatetabletest_table;#打印创建表的......
  • say goodbye to Heroku All In One
    saygoodbyetoHerokuAllInOnePersonalapps|Herokuhttps://dashboard.heroku.com/appsStartingNovember28th,2022,freeHerokuDynos,freeHerokuPostgr......
  • Codeforces Beta Round #87 (Div. 1 Only) A. Party(树的深度+dfs)
    https://codeforces.com/contest/115/problem/A题目大意:给定n个节点,每个节点都有一个不同于自己的数值,表示自己的老板,-1表示自己就是老板。现在玩游戏需要组队,一组队......
  • HDFS读写流程
    HDFS读流程客户端通过FileSystem的get方法加载配置获得FileSystem对象。FileSystem向NameNode通过open方法请求读取文件。NameNode进行检查(文件是否存在,是否有相应权......
  • Codeforces Round #321 (Div. 2) C. Kefa and Park(树+dfs)
    https://codeforces.com/contest/580/problem/C题目大意:给定一棵树,这棵树总共有n个节点,自己家住在节点1(根节点);每个节点都有一个标记a[i],标记为1就是这个地方有猫,0就表......
  • *洛谷 P1018 [NOIP2000 提高组] 乘积最大(dfs+高精度)
    说在前头此篇题解是记录自己的暴力写法,并不能100分满分通过洛谷测试数据(只有60)纯纯记录写法而写https://www.luogu.com.cn/problem/P1018我还说这么简单呢这题,想太......
  • ABC 249 C - Just K(dfs)
    https://atcoder.jp/contests/abc249/tasks/abc249_c题目大意:给定n个字符串,让我们随意选择,然后找到这里面相同的字母刚好等于k个的时候的数量是多少?求可选择出来的最......
  • HDFS shell命令行常用操作
    1.hadoopfs-mkdir[-p]<path>path为待创建的目录,如果没有一个父目录就加一个-p例:hadoopfs-mkdir/yuan创建一个shenzi的目录2.hadoopfs-ls[-h][-R][path]p......
  • 02-分布式文件服务器FastDFS[简介, 架构详解]
    分布式文件服务器-FastDFS什么是FastDFSFastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了......
  • 0460-HDFS纠删码的机架感知
    温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。Fayson的github:​​https://github.com/fayson/cdhproject​​提示:代码块部分可......