51-迷宫(一)- java版dfs和bfs
一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道。
看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头君是否有可以逃出去的路。
输入格式
第一行输入两个整数 nn 和 mm,表示这是一个 n \times mn×m 的迷宫。
接下来的输入一个 nn 行 mm 列的迷宫。其中 'S' 表示蒜头君的位置,'*'表示墙,蒜头君无法通过,'.'表示路,蒜头君可以通过'.'移动,'T'表示迷宫的出口(蒜头君每次只能移动到四个与他相邻的位置——上,下,左,右)。
输出格式
输出一个字符串,如果蒜头君可以逃出迷宫输出"yes",否则输出"no"。
数据范围
1 \le n, m \le 101≤n,m≤10。
输出时每行末尾的多余空格,不影响答案正确性
样例输入1复制
3 4
S**.
..*.
***T
样例输出1复制
no
样例输入2复制
3 4
S**.
....
***T
样例输出2复制
yes
bfs: 就是遍历周围的格子,能走的放入到一个Stack里面,然后放完,就一次去取,一层一层的取,注意要用一个 visit判断是否以前放入了,一旦重复放入那就会死循环。
import java.util.Scanner;
import java.util.Stack; public class Main{
public static String mp[] = new String[11];
public static int visit[][] = new int[11][11];
public static int ans = 0;
public static int n, m; public static void main(String[] args) {
Scanner cin = new Scanner(System.in); n = cin.nextInt();
m = cin.nextInt(); for(int i = 0; i < n; i++) {
mp[i] = cin.next();
// System.out.println(i + mp[i]);
}
// System.out.println("-----");
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
if(mp[i].charAt(j) == 'S') {
dfs(i,j);
break;
}
}
}
if(ans == 0) {
System.out.println("no");
}
else {
System.out.println("yes");
}
} public static void dfs(int x0, int y0) {
node no = new node(x0, y0);
Stack<node> stack = new Stack<node>();
stack.add(no);
visit[x0][y0] = 1;
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0}; while(!stack.empty()) {
node nd = stack.pop();
for(int i = 0; i < 4; i++) {
int x = nd.x + dx[i];
int y = nd.y + dy[i];
if(x >= 0 && x < n && y >= 0 && y < m &&
visit[x][y] == 0 && mp[x].charAt(y) != '*') {
if(mp[x].charAt(y) == 'T') {
ans = 1;
return ;
}
else {
node temp = new node(x, y);
stack.add(temp);
visit[x][y] = 1;
}
}
} } } } class node{
int x, y;
node(){ }
node(int x0, int y0){
this.x = x0;
this.y = y0;
}
}
dfs:
import java.util.Scanner;
public class Main1{
public static String mp[] = new String[11];
public static int[][] visit = new int[11][11];
public static int n, m, ans;
public static int dx[] = {0, 0, 1, -1};
public static int dy[] = {1, -1, 0, 0};
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
n = cin.nextInt();
m = cin.nextInt();
for(int i = 0; i < n; i++) {
mp[i] = cin.next();
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
if(mp[i].charAt(j) == 'S') {
visit[i][j] = 1;
dfs(i, j);
break;
}
}
}
if(ans == 1) {
System.out.println("yes");
}
else {
System.out.println("no");
}
}
public static void dfs(int x0, int y0) {
if(mp[x0].charAt(y0) == 'T') {
ans = 1;
return ;
}
for(int i = 0; i < 4; i++) {
int x = x0 + dx[i];
int y = y0 + dy[i];
if(x >= 0 && x < n && y >= 0 && y < m
&& visit[x][y] == 0 && mp[x].charAt(y) != '*') {
visit[x][y] = 1;
dfs(x, y);
visit[x][y] = 0;
}
}
}
}
51-迷宫(一)- java版dfs和bfs的更多相关文章
- Clone Graph leetcode java(DFS and BFS 基础)
题目: Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. ...
- 剑指Offer——回溯算法解迷宫问题(java版)
剑指Offer--回溯算法解迷宫问题(java版) 以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍.设计程序,对任意设定的迷宫,求出从入口到出口的所有通路. 下面我们来详细讲一 ...
- 迷宫最短路径问题的dfs,bfs实现
迷宫的最短路径 给定一个大小为 N×M的迷宫.迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四格的通道移动.请求出从起点到终点所需的小步数.请注意,本题假定从起点一定可以移动到终点 限制条件:N,M ...
- Java数据结构——图的DFS和BFS
1.图的DFS: 即Breadth First Search,深度优先搜索是从起始顶点开始,递归访问其所有邻近节点,比如A节点是其第一个邻近节点,而B节点又是A的一个邻近节点,则DFS访问A节点后再访 ...
- 【数据结构与算法笔记04】对图搜索策略的一些思考(包括DFS和BFS)
图搜索策略 这里的"图搜索策略"应该怎么理解呢? 首先,是"图搜索",所谓图无非就是由节点和边组成的,那么图搜索也就是将这个图中所有的节点和边都访问一遍. 其次 ...
- 玩转算法系列--图论精讲 面试升职必备(Java版)
第1章 和bobo老师一起,玩转图论算法欢迎大家来到我的新课程:<玩转图论算法>.在这个课程中,我们将一起完整学习图论领域的经典算法,培养大家的图论建模能力.通过这个课程的学习,你将能够真 ...
- 关于富文本编辑器—UEditor(java版)的使用,以及如何将UEditor的文件/图片上传路径改成绝对路径
突然发现好久没写博客了,感觉变懒了,是要让自己养成经常写文章的习惯才行.既可以分享自己的所学,和所想,和大家一起讨论,发现自己的不足的问题. 大家可能经常会用到富文本编辑器,今天我要说的是UEdito ...
- HDU 1241 Oil Deposits (DFS or BFS)
链接 : Here! 思路 : 搜索判断连通块个数, 所以 $DFS$ 或则 $BFS$ 都行喽...., 首先记录一下整个地图中所有$Oil$的个数, 然后遍历整个地图, 从油田开始搜索它所能连通多 ...
- 剑指offer题解(Java版)
剑指offer题解(Java版) 从尾到头打印链表 题目描述 输入一个链表,按从尾到头的顺序返回一个ArrayList. 方法1:用一个栈保存从头到尾访问链表的每个结点的值,然后按出栈顺序将各个值存入 ...
随机推荐
- 学习MeteoInfo二次开发教程(十一)
1.新添加状态栏ToolStrip,可能名称为toolStripStatusLabel2 这时需要把TSSL_Coord改为toolStripStatusLabel2 2.SetMapView();语 ...
- alpha阶段发布博客
我们的Phylab网站发布了! Alpha版本功能 模块 功能 注册界面 根据邮箱,学号等信息注册新用户 登陆界面 根据账号信息登陆 用户界面 查看,修改用户信息和签名 实验报告界面 查看各个实验预习 ...
- windows下nginx的安装及使用(转载)
转载自:https://www.cnblogs.com/jiangwangxiang/p/8481661.html 1.下载nginx http://nginx.org/en/download.htm ...
- Linux中docker的使用
# 列出当前所有正在运行的容器$ docker ps # 列出所有的容器$ docker ps -a # 列出最近一次启动的容器$ docker ps -l # 查看容器的相关信息$ docker i ...
- idea 炫酷插件
1.插件的安装 打开setting文件选择Plugins选项 Ctrl + Alt + S File -> Setting 分别是安装JetBrains插件,第三方插件,本地已下载的插件包.详情 ...
- .htaccess: Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration
php项目 .htaccess文件配置如下: #文件缓存时间配置 <FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css)$"& ...
- ATS6.2安装部署笔记
原文:http://www.safecdn.cn/ats/2018/12/ats6-2-install/1046.html 系统版本:CentOS 6.7 1.安装依赖包 yum -y install ...
- MYSQL临时表使用方法
当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后在这些表运行查询. ...
- Jmeter之数据库性能测试
公司的**产品急待上线,但查询订单操作响应很慢,为了准确定位问题,特对几个大数据查询语句进行性能测试. 环境介绍:数据库用的MYSQL,采用分布式布置,本次单压测一台数据库服务器,查询待支付订单.待消 ...
- 多线程服务端与客户端通信(IO是阻塞的)_02
下面是多线程的;每次服务端接受请求,会创建一个线程专门处理这个请求: 虽然是多线程的,但还是阻塞,相当于单线程处理模式 public class TimeServer { public static ...