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:用一个栈保存从头到尾访问链表的每个结点的值,然后按出栈顺序将各个值存入 ...
随机推荐
- windows2008 apache2.4 tomcat-7多域名绑定环境配置
=====================软件清单Apache2.4.33apache-tomcat-7.0.85===================== 1.安装apache 1.1下载ap ...
- 性能测试过程中oracle数据库报ORA-27301 ORA-27302错
最近在性能测试过程中发现,发现虚拟用户数上不去,加载到一定的数量应用端就报错,提示连接数据库出错.在测试的过程中查看web容器的线程池 数据源的连接池 都还有空闲,同时查看oracle的v$sessi ...
- 无法启动此程序,因为计算机中丢失VCRUNTIME140.dll 尝试重新安装此程序以解决此问题
最近在阿里云上租了个服务器,想借此发布一些自己制作的网页.于是就打算安装一下环境,考虑到搭建动态网站所要安装的环境比较多,于是就选择了wampserver这样一个集成环境的安装. 由于我的服务器很新( ...
- Docker镜像仓库Harbor搭建及配置
一.harbor简介 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全.标识和管理等,扩展了开源Docker Distribut ...
- java连Oracle连接字符串写法
JDBC URL: 1.ServiceName方式:jdbc:oracle:thin:@//<host>:<port>/ServiceName 如果是集群,不知道为什么是在配置 ...
- Python全栈开发记录_第八篇(模块收尾工作 json & pickle & shelve & xml)
由于上一篇篇幅较大,留下的这一点内容就想在这里说一下,顺便有个小练习给大家一起玩玩,首先来学习json 和 pickle. 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过, ...
- 使用JavaScript制作页面特效2
1.Date对象的常用方法 setFullYear() setMonth() setDate() setHours() setMinutes() setSeconds() 定时函数 setTimeou ...
- 6.2 集合和映射--集合Set->底层基于链表实现
在6.1中我们实现了底层基于二叉搜索树的集合,本节就底层如何基于链表实现进行学习,注意:此处的链表是之前自己封装的. 1.集合set相关功能 1.1 add()的不同 用于链表本身没有去重的效果,因此 ...
- Burpsuite Sqlmap Nmap入门总结
burpsuite sqlmap nmap 简介 sqlmap基础 五种独特sql注入技术: 基于布尔类型的盲注 基于时间的盲注 基于报错注入 联合查询注入 堆查询注入 sqlmap入门 1.判断是否 ...
- ORM版学员管理系统 3
老师信息管理 思考 三种方式创建多对多外键方式及其优缺点. 通过外键创建 class Class(models.Model): id = models.AutoField(primary_key=Tr ...