标签:
深度优先算法的Java实现
public class JavaDFS { public int stepnum = 999; /*构建11*11的迷宫,英雄H在(1,1)的位置出发,去解救美女M(6,8),#表示墙壁,*表示炸弹*/ public char[][] graph = { {‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘}, {‘#‘,‘H‘,‘_‘,‘_‘,‘*‘,‘_‘,‘_‘,‘*‘,‘_‘,‘_‘,‘#‘}, {‘#‘,‘_‘,‘_‘,‘_‘,‘_‘,‘_‘,‘_‘,‘_‘,‘_‘,‘_‘,‘#‘}, {‘#‘,‘_‘,‘*‘,‘_‘,‘_‘,‘_‘,‘*‘,‘_‘,‘_‘,‘_‘,‘#‘}, {‘#‘,‘_‘,‘_‘,‘_‘,‘*‘,‘_‘,‘_‘,‘_‘,‘_‘,‘*‘,‘#‘}, {‘#‘,‘_‘,‘_‘,‘_‘,‘_‘,‘_‘,‘_‘,‘*‘,‘_‘,‘*‘,‘#‘}, {‘#‘,‘_‘,‘*‘,‘_‘,‘_‘,‘_‘,‘_‘,‘_‘,‘M‘,‘_‘,‘#‘}, {‘#‘,‘*‘,‘_‘,‘_‘,‘*‘,‘_‘,‘_‘,‘_‘,‘_‘,‘_‘,‘#‘}, {‘#‘,‘_‘,‘_‘,‘_‘,‘_‘,‘_‘,‘_‘,‘_‘,‘_‘,‘_‘,‘#‘}, {‘#‘,‘_‘,‘_‘,‘_‘,‘*‘,‘_‘,‘_‘,‘_‘,‘_‘,‘_‘,‘#‘}, {‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘,‘#‘}, }; /*初始标记数组都为0*/ public int[][] mark = new int[graph.length][graph.length]; /*每一个位置有四种选择:右、下、左、上*/ public int[][] choose = { {0,1},{1,0},{0,-1},{-1,0} }; public void DFS(int x,int y, int step) { /*找到美女M*/ if (graph[x][y] == ‘M‘) { if(step < stepnum)//更新最小step { System.out.println("this way is smaller"+step); stepnum = step; } return;//找到之后立即返回,不再继续 } //新位置 int tx = 0; int ty = 0; for(int i=0;i<4;i++) { tx = x + choose[i][0]; ty = y + choose[i][1]; if(graph[tx][ty] != ‘#‘ && graph[tx][ty] != ‘*‘ && mark[tx][ty] == 0)//没有遇到炸弹,没有墙,并且路径没有标记走过 { mark[tx][ty] = 1;//标记该点已经走过 DFS(tx,ty,step+1); mark[tx][ty] = 0;//取消该点的标记 } } return; } public static void main(String[] args) { JavaDFS myDFS = new JavaDFS(); myDFS.mark[1][1] = 1; System.out.println("start finding MM:"); long start = System.currentTimeMillis(); /*英雄H从(1,1)出发,step初始为0*/ myDFS.DFS(1,1,0); long end = System.currentTimeMillis(); System.out.println("end finding MM:step= " + myDFS.stepnum + "time=" + (end-start)); } }
(1)输出结果:发现非常耗时,居然有2min。是不是我的代码有问题?
start finding MM:
this way is smaller14
this way is smaller12
end finding MM: step= 12 time=150931
(2)DFS不能记录具体的路径值
标签:
原文地址:http://www.cnblogs.com/mingziday/p/4822761.html