当前位置:   article > 正文

Java图搜索算法详解:探索图论中的奥秘_java以图搜图

java以图搜图

图搜索算法是图论领域的重要内容,它在解决各种实际问题中起着关键作用。本文将详细介绍几种常见的Java图搜索算法,包括深度优先搜索(DFS)、广度优先搜索(BFS)以及Dijkstra算法,帮助读者深入理解图搜索算法的原理和应用。

1. 深度优先搜索(DFS)

深度优先搜索是一种递归的搜索算法,它从图的某一顶点出发,沿着一条路径尽可能深地搜索,直到到达最远的顶点,然后再回溯到上一个顶点,继续搜索其他路径。DFS通常使用栈来实现,其时间复杂度为O(V+E),其中V是顶点数,E是边数。

  1. import java.util.*;
  2. public class DepthFirstSearch {
  3. private boolean[] visited;
  4. private List<List<Integer>> graph;
  5. public DepthFirstSearch(int n) {
  6. visited = new boolean[n];
  7. graph = new ArrayList<>();
  8. for (int i = 0; i < n; i++) {
  9. graph.add(new ArrayList<>());
  10. }
  11. }
  12. public void addEdge(int u, int v) {
  13. graph.get(u).add(v);
  14. }
  15. public void dfs(int u) {
  16. visited[u] = true;
  17. System.out.print(u + " ");
  18. for (int v : graph.get(u)) {
  19. if (!visited[v]) {
  20. dfs(v);
  21. }
  22. }
  23. }
  24. public static void main(String[] args) {
  25. DepthFirstSearch dfs = new DepthFirstSearch(5);
  26. dfs.addEdge(0, 1);
  27. dfs.addEdge(0, 2);
  28. dfs.addEdge(1, 3);
  29. dfs.addEdge(1, 4);
  30. dfs.dfs(0); // 从节点0开始深度优先搜索
  31. }
  32. }

2. 广度优先搜索(BFS)

广度优先搜索是一种迭代的搜索算法,它从图的某一顶点出发,逐层地搜索,直到找到目标顶点或者遍历完所有顶点。BFS通常使用队列来实现,其时间复杂度同样为O(V+E)。

  1. import java.util.*;
  2. public class BreadthFirstSearch {
  3. private boolean[] visited;
  4. private List<List<Integer>> graph;
  5. public BreadthFirstSearch(int n) {
  6. visited = new boolean[n];
  7. graph = new ArrayList<>();
  8. for (int i = 0; i < n; i++) {
  9. graph.add(new ArrayList<>());
  10. }
  11. }
  12. public void addEdge(int u, int v) {
  13. graph.get(u).add(v);
  14. }
  15. public void bfs(int u) {
  16. Queue<Integer> queue = new LinkedList<>();
  17. visited[u] = true;
  18. queue.offer(u);
  19. while (!queue.isEmpty()) {
  20. int cur = queue.poll();
  21. System.out.print(cur + " ");
  22. for (int v : graph.get(cur)) {
  23. if (!visited[v]) {
  24. visited[v] = true;
  25. queue.offer(v);
  26. }
  27. }
  28. }
  29. }
  30. public static void main(String[] args) {
  31. BreadthFirstSearch bfs = new BreadthFirstSearch(5);
  32. bfs.addEdge(0, 1);
  33. bfs.addEdge(0, 2);
  34. bfs.addEdge(1, 3);
  35. bfs.addEdge(1, 4);
  36. bfs.bfs(0); // 从节点0开始广度优先搜索
  37. }
  38. }

3. Dijkstra算法

Dijkstra算法是一种用于计算图中单源最短路径的贪心算法,它通过维护一个优先队列来选择下一个要访问的顶点,并不断更新顶点到源顶点的最短距离。Dijkstra算法适用于边权值非负的有向图或无向图,其时间复杂度为O(V^2),其中V是顶点数。

  1. import java.util.*;
  2. public class Dijkstra {
  3. private int[] dist;
  4. private boolean[] visited;
  5. private List<List<int[]>> graph;
  6. public Dijkstra(int n) {
  7. dist = new int[n];
  8. visited = new boolean[n];
  9. Arrays.fill(dist, Integer.MAX_VALUE);
  10. graph = new ArrayList<>();
  11. for (int i = 0; i < n; i++) {
  12. graph.add(new ArrayList<>());
  13. }
  14. }
  15. public void addEdge(int u, int v, int w) {
  16. graph.get(u).add(new int[] { v, w });
  17. }
  18. public void dijkstra(int src) {
  19. PriorityQueue<int[]> pq = new PriorityQueue<>(Comparator.comparingInt(a -> a[1]));
  20. dist[src] = 0;
  21. pq.offer(new int[] { src, 0 });
  22. while (!pq.isEmpty()) {
  23. int[] cur = pq.poll();
  24. int u = cur[0];
  25. if (visited[u]) continue;
  26. visited[u] = true;
  27. for (int[] edge : graph.get(u)) {
  28. int v = edge[0];
  29. int w = edge[1];
  30. if (!visited[v] && dist[u] + w < dist[v]) {
  31. dist[v] = dist[u] + w;
  32. pq.offer(new int[] { v, dist[v] });
  33. }
  34. }
  35. }
  36. }
  37. public static void main(String[] args) {
  38. Dijkstra dijkstra = new Dijkstra(5);
  39. dijkstra.addEdge(0, 1, 10);
  40. dijkstra.addEdge(0, 2, 5);
  41. dijkstra.addEdge(1, 3, 2);
  42. dijkstra.addEdge(2, 1, 3);
  43. dijkstra.addEdge(2, 3, 9);
  44. dijkstra.dijkstra(0); // 从节点0开始Dijkstra算法
  45. }
  46. }

结论

Java图搜索算法是图论中的重要内容,掌握这些算法对于解决各种实际问题至关重要。通过本文的介绍和实例演示,读者可以更加深入地理解深度优先搜索、广度优先搜索和Dijkstra算法的原理和应用,为解决实际问题提供了强有力的工具和思路。

  感谢您阅读本文,欢迎“一键三连”。作者定会不负众望,按时按量创作出更优质的内容。
❤️ 1. 毕业设计专栏,毕业季咱们不慌,上千款毕业设计等你来选。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/623697
推荐阅读
相关标签
  

闽ICP备14008679号