【数据结构】最短路径问题(BFS/DFS算法,Dijkstra算法,Floyd算法,Bellman-Ford算法)

BFS算法——严格层序的BFS

核心思路

原生广度优先遍历的特点本来就是由源点向外发散,我们通过对队列大小的暂存,可以实现严格的按层遍历,层数即路径长度。

【数据结构】最短路径问题(BFS/DFS算法,Dijkstra算法,Floyd算法,Bellman-Ford算法)_第1张图片

适用场景

因为本算法将层数看作路径长度,所以这要求图的所有边要么无权、要么权值相等。

单源的;可以求到某一个点的最短路径,也可以求到所有点的最短路径。

代码实现

private void DFS(boolean[][] graph, int source) {
   
	int len = graph.length;
	int[] dist = new int[len];                          // dist[i]含义为从源点到i的最短距离

	ArrayDeque<Integer> queue = new ArrayDeque<>();     // 用于BFS的队列
	queue.offer(source);
	boolean[] visited = new boolean[len];               // visited[]记录是否已被访问过
	visited[source] = true;

	int layer = 1;                                      // 层数(即最短路径)初始化为1
	while (!queue.isEmpty()) {
   
		int size = queue.size();                        // 缓存一下队列的大小,这是严格层序BFS的关键
		for (int i = 0; i < size; i++) {
   
			int cur = queue.poll();
			for (int nxt = 0; nxt < len; nxt++) {
   
				if (graph[cur][nxt] 

你可能感兴趣的:(#,数据结构,数据结构,算法)