AtCoder 1350-深さ優先探索(DFS)

简介: AtCoder 1350-深さ優先探索(DFS)

由于本题的来源在 AtCoder 上,是日文,而在洛谷上也直接给出了题目翻译和大意,如下:👇👇👇


题意翻译:


高桥先生住的小区是长方形的,被划分成一个个格子。高桥先生想从家里去鱼店,高桥先生每次可以走到他前后左右四个格子中的其中一个,但不能斜着走,也不能走出小区。


现在给出地图:


s:代表高桥先生的家


g:代表鱼店


.:代表道路


#:代表墙壁


高桥先生不能穿过墙壁。


输入:第一行输入n(1<=n<=500),m(1<=m<=500)代表小区的长和宽,接下来n行每行m个字符,描述小区中的每个格子。


输出:如果高桥先生能到达鱼店,输出"Yes",否则输出"No"。


样例输入1:(一共有五组,不是多实例)


4 5


s####


....#


#####


#...g


样例输出1:


No


样例输入2:


4 4


...s


....


....


.g..


样例输出2:


Yes


样例输入3:


10 10


s.........


#########.


#.......#.


#..####.#.


##....#.#.


#####.#.#.


g.#.#.#.#.


#.#.#.#.#.


###.#.#.#.


#.....#...


样例输出3:


No


样例输入4:


10 10


s.........


#########.


#.......#.


#..####.#.


##....#.#.


#####.#.#.


g.#.#.#.#.


#.#.#.#.#.


#.#.#.#.#.


#.....#...


样例输出4:


Yes


样例输入5:


1 10


s..####..g


样例输出5:


No


AC Code:  


#include<bits/stdc++.h>
using namespace std;
const int N=501;
char s[N][N];//存入地图的数组 
int vis[N][N];//标记数组 
int n,m,sx,sy,ex,ey,flag;
int dx[]={0,0,1,-1};//这两个是方向数组 
int dy[]={1,-1,0,0};
bool judge(int x,int y) {//越界判断的函数 
  if(x>=0&&x<n&&y>=0&&y<m)
    return true;
  return false;
}
void dfs(int x,int y) {
  vis[x][y]=1;//每次都将搜索到的这个点标记为1 
  if(x==ex&&y==ey) {//此时已走到终点 
    flag=1;
    return ;
  }
  for(int i=0;i<4;i++) {//上下左右四个方向搜索 
    int tx=x+dx[i];
    int ty=y+dy[i];
    if(judge(tx,ty)&&vis[tx][ty]==0&&s[tx][ty]!='#') {//不越界、这个点未被访问并且不能是围墙 
      dfs(tx,ty);//继续下一个满足点的搜索 
    }
  }
}
int main() {
  scanf("%d %d",&n,&m);
  for(int i=0;i<n;i++) 
    for(int j=0;j<m;j++)
      scanf(" %c",&s[i][j]);//%前面的空格确保可以完整输入 
  memset(vis,0,sizeof(vis));//标记数组清零 
  for(int i=0;i<n;i++) {
    for(int j=0;j<m;j++) {
      if(s[i][j]=='s') {//找到起点 
        sx=i;
        sy=j;
      }
      if(s[i][j]=='g') {//找到终点 
        ex=i;
        ey=j;
      }
    }
  }
  dfs(sx,sy);//将起点代入,开始搜索 
  if(flag==1) {//可以到达 
    printf("Yes\n");
  }else {//无法到达 
    printf("No\n");
  }
  return 0;
}


相关文章
|
算法 安全 C++
【C++ 泛型编程 入门篇】深入探索C++的numeric_limits:全面理解数值界限(一)
【C++ 泛型编程 入门篇】深入探索C++的numeric_limits:全面理解数值界限
591 0
|
Java 开发工具
开发工具系列 之 同一个电脑上安装多个版本的JDK
这篇文章介绍了如何在一台电脑上安装和配置多个版本的JDK,包括从官网下载所需JDK、安装过程、配置环境变量以及如何查看和切换当前使用的JDK版本,并提到了如果IDEA和JDK版本不兼容时的解决方法。
开发工具系列 之 同一个电脑上安装多个版本的JDK
|
开发工具 git Python
stable-diffusion-webui 更换 Python 版本
stable-diffusion-webui 更换 Python 版本
992 0
1358:中缀表达式值(expr)
1358:中缀表达式值(expr)
270 0
|
C语言 C++
【c++】C语言之输入行数,输出实心菱形和空心菱形
C语言之输入行数,输出实心菱形和空心菱形
1553 1
【c++】C语言之输入行数,输出实心菱形和空心菱形
|
定位技术
AtCoder 1350-深さ優先探索(DFS)
AtCoder 1350-深さ優先探索(DFS)
|
8天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!