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:用一个栈保存从头到尾访问链表的每个结点的值,然后按出栈顺序将各个值存入 ...
随机推荐
- robotframework在3.7下的搭建
网上看了大多安装RIDE都是在python2的环境下,今天试了下python3的安装,成功了,步骤如下: 1.首先是python3的安装,以及pip这些工具,具体的网上一堆,不再啰嗦 2.安装robo ...
- 学习MeteoInfo二次开发教程(九)
最终的MaskOut功能未能实现 另外,一个有用的,在指定位置显示图片: legend.MarkerType = MarkerType.Image; legend.ImagePath = " ...
- JAVA相关技术
开发服务器环境: 1.Linux系统 CentOS 6.5\7 2.JDK1.8 3.tomcat 9 4.mysql 5.7 开发环境: 1.开发集成工具:idea 2.构建工具maven 仓库暂时 ...
- Android自定义万能Canvas画布
一.需求: 1.在自定义的画布中实现可缩放手势,摇一摇可对控件进行整理排序: 2.画布中可以添加位置设定的控件,控件可以响应点击.长按.拖动事件: 3.控件A长按事件会隐藏画布中的控件除了A之外,显示 ...
- thinkphp中上传图片以及制成缩略图
form表单中必须有的一个属性: enctype=”multipart/form-data” html的写法: <form action="__SELF__" method= ...
- nodejs版 阿里云开放api签名算法
阿里云 API 签名 github:https://github.com/liuyinglong/aliyun; npm :https://www.npmjs.com/package/aliyun-a ...
- nginx访问统计
1).根据访问IP统计UV awk '{print $1}' access.log|sort | uniq -c |wc -l 2).统计访问URL统计PV awk '{print $7}' acc ...
- 文件系统扫描工具-fsck
文件系统扫描工具-fsck 注意的是fsck扫描文件系统时一定要在单用户模式.修复模式或把设备umount后进行.建议在单用户模式下运行.如果扫描正常运行中的系统,会造成系统文件损坏. fsck不仅可 ...
- 【C语言 基础】什么流程控制?
流程控制就是控制程序执行的顺序 流程控制的分类: 1.顺序执行 2.选择执行 定义 某些代码可能执行也可能不执行,有选择的执行某些代码 3.循环执行
- python_14 静态属性、类方法、静态方法;组合;继承
静态属性 在类中函数前加@property,在实例调用函数时无需加(),将函数属性封装,调用时看起来与数据属性类似 将函数封装成数据属性的形式,外部调用时看不到逻辑,静态属性可以访问实例属性也可以访问 ...