图论经典算法总结及leetcode例题(拓扑排序、并查集、dijkstra、floyd、prim、krustral、bellman

您所在的位置:网站首页 经典算法问题例题及解析 图论经典算法总结及leetcode例题(拓扑排序、并查集、dijkstra、floyd、prim、krustral、bellman

图论经典算法总结及leetcode例题(拓扑排序、并查集、dijkstra、floyd、prim、krustral、bellman

2024-07-04 00:10| 来源: 网络整理| 查看: 265

文章目录 广度优先搜索深度优先搜索拓扑排序并查集(Disjoint-set)Dijkstra算法求单源最短路径Bellman-Ford求单源最短路径Floyd求全图最短路径Kruskal算法求最小生成树Prim算法求最小生成树总结应用

广度优先搜索

广度优先搜索可以用来求解无权图的最短路径问题。广度优先搜索每遍历到下一层则路径长度加一,遍历到终点时的路径长度即是问题的解。 二进制矩阵中的最短路径 广度优先搜索如果需要按层次执行某些操作(比如查找最大的层、无权图的单源最短路径等问题),需要使用两层循环,外层循环判空,内层循环对当前层进行操作。下面的题目中bfs就是单源最短路径的模板题。

class Solution { int[][] grid; int len; public int shortestPathBinaryMatrix(int[][] grid) { len = grid.length; if (grid[0][0] == 1 || grid[len-1][len-1] == 1) return -1; this.grid = grid; return bfs(); } public int bfs() { Queue queue = new ArrayDeque(); queue.add(new int[]{0,0}); grid[0][0] = 1; int[] disx = new int[]{-1, -1, -1, 0, 0, 1, 1, 1}; int[] disy = new int[]{-1, 0, 1, -1, 1, -1, 0, 1}; int ans = 1; while (!queue.isEmpty()) { int size = queue.size(); while (--size >= 0) { int x = queue.peek()[0]; int y = queue.poll()[1]; if (x == len-1 && y == len-1) return ans; for (int i = 0; i = len || nextx = len || nexty


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3