欢迎来到数据结构学习专栏~探索图结构:从基础到算法应用
- ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒
- ✨博客主页:IT·陈寒的博客
- 该系列文章专栏:数据结构学习
- 其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
- 文章作者技术和水平有限,如果文中出现错误,希望大家能指正
- 欢迎大家关注! ❤️
图结构是计算机科学中的一项重要内容,它能够模拟各种实际问题,并在网络、社交媒体、地图等领域中具有广泛的应用。本文将引导你深入了解图的基本概念、遍历算法以及最短路径算法的实际应用。
顶点和边: 图由一组顶点(vertices)和连接这些顶点的边(edges)构成。边可以带有权重(weight),代表两个顶点之间的关系强度或成本。
有向图与无向图: 有向图中的边是有方向的,从一个顶点指向另一个顶点;无向图中的边没有方向,是双向的。
权重图: 权重图中的边带有权重,用于表示顶点之间的距离、代价等信息。
深度优先搜索(DFS): DFS 是一种遍历图的算法,它从一个起始顶点开始,递归地访问相邻顶点,直到无法继续为止。DFS 的应用包括查找连通分量、拓扑排序等。
广度优先搜索(BFS): BFS 也是一种遍历图的算法,它从起始顶点开始,逐层访问其邻居顶点。BFS 的应用包括查找最短路径、社交网络中的“六度分隔”等。
Dijkstra 算法: Dijkstra 算法用于查找带权重的图中从一个起始顶点到其他顶点的最短路径。它采用贪心策略,每次选择当前距离最近的顶点进行拓展。Dijkstra 算法的应用包括路由算法、地图导航等。
Bellman-Ford 算法: Bellman-Ford 算法也用于查找图中的最短路径,但与 Dijkstra 算法不同,它适用于带有负权边的图。Bellman-Ford 算法通过进行多次松弛操作逐步逼近最短路径。
假设我们有一个城市之间的道路网络,每条道路都有对应的时间(权重)。我们想要找到从起始城市到目标城市的最短时间路径。以下是使用 Dijkstra 算法实现这个目标的示例代码:
import java.util.*;
public class ShortestPath {
public Map<String, Integer> findShortestPath(Map<String, Map<String, Integer>> graph, String start, String end) {
PriorityQueue<String> pq = new PriorityQueue<>(Comparator.comparingInt(graph.get(start)::get));
Map<String, Integer> distances = new HashMap<>();
Map<String, String> predecessors = new HashMap<>();
distances.put(start, 0);
graph.keySet().forEach(city -> {
if (!city.equals(start)) {
distances.put(city, Integer.MAX_VALUE);
predecessors.put(city, null);
}
pq.offer(city);
});
while (!pq.isEmpty()) {
String current = pq.poll();
for (Map.Entry<String, Integer> neighbor : graph.get(current).entrySet()) {
int newDistance = distances.get(current) + neighbor.getValue();
if (newDistance < distances.get(neighbor.getKey())) {
distances.put(neighbor.getKey(), newDistance);
predecessors.put(neighbor.getKey(), current);
}
}
}
Map<String, Integer> shortestPath = new HashMap<>();
String current = end;
while (current != null) {
shortestPath.put(current, distances.get(current));
current = predecessors.get(current);
}
return shortestPath;
}
public static void main(String[] args) {
ShortestPath shortestPath = new ShortestPath();
Map<String, Map<String, Integer>> graph = new HashMap<>();
graph.put("A", Map.of("B", 5, "C", 2));
graph.put("B", Map.of("D", 1, "E", 6));
graph.put("C", Map.of("B", 1, "D", 4));
graph.put("D", Map.of("E", 1));
graph.put("E", Collections.emptyMap());
String start = "A";
String end = "E";
Map<String, Integer> result = shortestPath.findShortestPath(graph, start, end);
System.out.println("Shortest path from " + start + " to " + end + ": " + result);
}
}
图结构在现实世界中有着丰富的应用,从社交网络到交通系统。了解图的基本概念、遍历算法以及最短路径算法,可以让你更好地理解和处理与图相关的问题。通过学习这些知识,你将能够在解决实际问题时更加灵活和高效地运用图结构和算法。
结尾
❤️ 感谢您的支持和鼓励!
您可能感兴趣的内容:
- 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
- 【Java学习路线】2023年完整版Java学习路线图
- 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
- 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
- 【数据结构学习】从零起步:学习数据结构的完整路径