深度优先搜索 走迷宫 java实现
2018-03-23 20:13
260 查看
题目如下 :
本题我采用深度优先搜索的方式解决,建立一个二维的int类型数组,定义其中的1代表起点,2代表可以走的地方,3代表不可以走的地方,4代表终点,其中由于在搜索的时候有上下左右四个方向,为了防止做判断的时候报ArrayIndexOfBoundsException,所以保存地图的二维数组我故意多了两行两列作为边界,值设置为0,然后定义一个函数 dfs(int x,int y)代表搜索这个位置,一开始先从地图上的起点开始搜索,设置一个二维数组move记录可以走的方向,所以代码如下
import java.util.*;
public class DFSMiGong {
static int[][] datas = null;
static int[][] move = {{0,1},{1,0},{-1,0},{0,-1}};
static int result = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int startX=0,startY=0;
String temp = null;
datas = new int[n+2][m+2];
for(int i=1;i<=n;i++){
temp = sc.next();
for(int j=1;j<=m;j++){
char techar = temp.charAt(j-1);
switch(techar){
case 'S':
datas[i][j] = 1;startX=i;startY=j;break;
case 'T':
datas[i][j] = 4;break;
case '.':
datas[i][j] = 2;break;
case '#':
datas[i][j] = 3;break;
}
}
}
dfs(startX,startY);
System.out.print(result);
}
public static void dfs(int x,int y){
if(datas[x][y]==4){//如果走到了终点,数目加1
result+=1;
return ;
}else{
for(int i=0;i<4;i++){ //尝试四个方向
datas[x][y] = 0; //标记这个位置走过了,因为一个位置只能走一次
if(datas[x+move[i][0]][y+move[i][1]]==2||datas[x+move[i][0]][y+move[i][1]]==4){
dfs(x+move[i][0],y+move[i][1]);
}
datas[x][y] = 2; //回溯,因为2代表可以走
}
}
}
}结果如下 :
本题我采用深度优先搜索的方式解决,建立一个二维的int类型数组,定义其中的1代表起点,2代表可以走的地方,3代表不可以走的地方,4代表终点,其中由于在搜索的时候有上下左右四个方向,为了防止做判断的时候报ArrayIndexOfBoundsException,所以保存地图的二维数组我故意多了两行两列作为边界,值设置为0,然后定义一个函数 dfs(int x,int y)代表搜索这个位置,一开始先从地图上的起点开始搜索,设置一个二维数组move记录可以走的方向,所以代码如下
import java.util.*;
public class DFSMiGong {
static int[][] datas = null;
static int[][] move = {{0,1},{1,0},{-1,0},{0,-1}};
static int result = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int startX=0,startY=0;
String temp = null;
datas = new int[n+2][m+2];
for(int i=1;i<=n;i++){
temp = sc.next();
for(int j=1;j<=m;j++){
char techar = temp.charAt(j-1);
switch(techar){
case 'S':
datas[i][j] = 1;startX=i;startY=j;break;
case 'T':
datas[i][j] = 4;break;
case '.':
datas[i][j] = 2;break;
case '#':
datas[i][j] = 3;break;
}
}
}
dfs(startX,startY);
System.out.print(result);
}
public static void dfs(int x,int y){
if(datas[x][y]==4){//如果走到了终点,数目加1
result+=1;
return ;
}else{
for(int i=0;i<4;i++){ //尝试四个方向
datas[x][y] = 0; //标记这个位置走过了,因为一个位置只能走一次
if(datas[x+move[i][0]][y+move[i][1]]==2||datas[x+move[i][0]][y+move[i][1]]==4){
dfs(x+move[i][0],y+move[i][1]);
}
datas[x][y] = 2; //回溯,因为2代表可以走
}
}
}
}结果如下 :
相关文章推荐
- 图的深度优先,完全搜索...有点脑残....java实现
- (算法入门)基本图论-深度优先搜索之JAVA实现
- Java实现图:邻接矩阵表示、深度优先搜索、广度优先搜索、无向图的最小生成树
- 广度优先搜索与深度优先搜索的 java 实现
- 深度优先搜索解决 踏青问题 java实现
- Java实现数据结构之深度优先搜索DFS和广度优先搜索BFS
- 基于图的深度优先搜索和广度优先搜索java实现
- java实现图的遍历(深度优先遍历和广度优先遍历)
- 基于地图的深度优先、广度优先、Dijkstra算法Java实现。
- 深度优先搜索DFS(邻接表实现)
- 深度优先搜索迷宫路径算法的实现
- C++深度优先搜索的实现方法
- 深度优先搜索非递归实现
- JAVA实现广度搜索&深度搜素
- 无权图无向图【邻接矩阵存储】深度搜索和广度搜索--Java实现
- 基于邻接矩阵实现的DFS深度优先搜索
- java-二叉树广度优先实现、深度优先之前序实现(非递归)
- 深度优先搜索的实现
- 深度优先搜索的实现
- java 实现二叉树深度优先遍历的 前、中、后序遍历(递归)