From b0b505b5f45ac2af540a7c8e62da31b6cf8400e0 Mon Sep 17 00:00:00 2001 From: liangjinglin Date: Sat, 25 Jan 2025 13:41:47 +0800 Subject: [PATCH] =?UTF-8?q?2025-01-24=20=E5=9B=BE=E3=80=81=E6=B7=B1?= =?UTF-8?q?=E5=BA=A6=E4=BC=98=E5=85=88=E7=AE=97=E6=B3=95=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?=E5=B9=BF=E5=BA=A6=E4=BC=98=E5=85=88=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/dataANDcalc/java/graph/UndirectGraph.java | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 src/dataANDcalc/java/graph/UndirectGraph.java diff --git a/src/dataANDcalc/java/graph/UndirectGraph.java b/src/dataANDcalc/java/graph/UndirectGraph.java new file mode 100644 index 0000000..220e40e --- /dev/null +++ b/src/dataANDcalc/java/graph/UndirectGraph.java @@ -0,0 +1,134 @@ +package graph; + +import java.util.HashMap; +import java.util.LinkedList; +import java.util.Map; + +public class UndirectGraph { + + private Map vertexMap; + + private Map vertexReverseMap; + + private int[][] edges; + + private int vertexNum; + + private int edgeNum; + + private boolean[] hasGone; + + private LinkedList queue; + + public UndirectGraph(int n){ + vertexMap = new HashMap<>(); + vertexReverseMap = new HashMap<>(); + edges = new int[n][n]; + hasGone = new boolean[n]; + vertexNum = 0; + queue = new LinkedList<>(); + } + + public void addVertex(String vertex){ + vertexMap.put(vertex, vertexNum); + vertexReverseMap.put(vertexNum, vertex); + vertexNum++; + } + + public void addEdge(String ver1, String ver2, int weight){ + int v1 = vertexMap.get(ver1); + int v2 = vertexMap.get(ver2); + edges[v1][v2] = weight; + edges[v2][v1] = weight; + edgeNum++; + } + + public int getVertexNum(){ + return vertexNum; + } + + public int getEdgeNum(){ + return edgeNum; + } + + public void showGraph(){ + System.out.println("图的邻接矩阵为:"); + for (int i = 0; i < edges.length; i++){ + for (int j = 0; j < edges[i].length; j++){ + System.out.print(edges[i][j] + " "); + } + System.out.println(); + } + } + + /** + * 深度优先遍历 + * @param start 起点位置 + * @param end 终点位置 + * @param route + */ + public void dfs(String start, String end, String route){ + if (route == null || "".equals(route)){ + route = start; + } else { + route += "->" + start; + } + if (start.equals(end)){ + System.out.println("到达终点,路径是:" + route); + return; + } else { + System.out.println("当前路径是:" + route); + } + int startInt = vertexMap.get(start); + hasGone[startInt] = true; + for(int i=0; i" + next); + hasGone[vertexMap.get(next)] = true; + System.out.println(); + } + } + String next = queue.getFirst(); + bfs(next, end, route + "->" + next); + } + + public void bfs(String start, String end){ + queue.addFirst(start); + bfs(start, end, start); + } + + public static void main(String[] args) { + UndirectGraph undirectGraph = new UndirectGraph(5); + String[] vertexArr = {"A","B","C","D","E"}; + for(int i=0; i