广搜的概念不用多讲了,这里的算法主要针对二维矩阵(迷宫)的广搜。
二维矩阵中的点一般只与上下左右4个结点相邻,看题目定义,有的和斜角也相邻。所以就没必要用邻接矩阵存边数据,直接搜就可以啦。
与传统bfs不同的数据结构:
graph(二维矩阵图)
vis(二维标记,标记对应位置是否访问过)
direction(存行走方向,比如往左走就是{0,-1},表示 i 不变,j 减一嘛,同理右{0,1},上 {-1,0},下{1,0})
node(存点的位置 {x, y})
步骤不多说啦,大同小异嘛,注意队列里是存点的位置。
这里的代码主要用一个graph类来描述一个图,然后在图里面写一个深搜算法。仅作为参考。刷题的人可以只用深搜算法即可,当然要准备好对应的数据结构啦。
//此类是用来描述一个基于二维数组的图
package Graph;
import java.util.LinkedList;
public class SimpleGraph {
private static int nodeNum = 0;
private static int[][] graph;
private static int[][] direction = {
{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
private static int[][] visited;
public SimpleGraph() {}
public SimpleGraph(int[][] graph) {
this.graph = graph;
visited = new int[graph.length][graph[0].length];
}
public int getNodeNum() {
return nodeNum;
}
//广度优先搜索Breadth First Search,从点(x, y)开始,队列实现
public void bfs(int x, int y) {