一个根据深度搜索模型写的最短路径代码
参考如下
啊哈算法-4.2 p81
/**
* 最短路径
*/
public class ShortPath {
public static int next[][] = {{0, 1},//向右走
{1, 0},//向下走
{0, -1},//向左走
{-1, 0}};//向上走;
//地图是一个5*5的矩阵
public static int x = 5, y = 5;
//定义终点
public static int ex = 2, ey = 2;
//地图容器
public static int map[][] = new int[x][y];
//用来判断是否经过路径
public static int flag[][] = new int[x][y];
/**
* @param dx 当前x坐标
* @param dy 当前y坐标
* @param step 用来累加步长
*/
public static void dfs(int dx, int dy, int step) {
//定义方法边界,如果到达终点返回
if (dx == ex && dy == ey) {
//打印所有可达路径
printMap(flag);
return;
}
//用来存储下次可达路径
int mx, my;
for (int i = 0; i < next.length; i++) {
mx = dx + next[i][0];
my = dy + next[i][1];
/*判断是否超出地图*/
if (mx < 0 || mx >= x || my < 0 || my >= y) {
continue;
}
/*flag[mx][my]==0代表之前没有走过*/
if (flag[mx][my] == 0) {
//将路径路径锁定,防止递归走回
flag[mx][my] = 1;
//进行下一次遍历
dfs(mx, my, step + 1);
//释放锁定的路径
flag[mx][my] = 0;
}
}
return;
}
/**
* 初始化地圖
*
* @param end_x
* @param end_y
*/
public static void initMap(int end_x, int end_y) {
map[end_x][end_y] = 2;
System.out.println("==初始化地图==");
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
System.out.printf(String.valueOf(map[i][j]) + " ");
}
System.out.println();
}
}
/**
* 打印地图路径
*
* @param map
*/
public static void printMap(int[][] map) {
System.out.println("==打印依次路徑==");
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
System.out.printf(String.valueOf(map[i][j]) + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
initMap(ex, ey);
dfs(0, 0, 0);
}
}