From 690c544ed357b89ccc22a874853e90590f6b7b42 Mon Sep 17 00:00:00 2001 From: suyi <1739792596@qq.com> Date: Fri, 15 Jan 2021 12:58:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- untitled/src/GraphNode.java | 33 +++++++++++++ untitled/src/GraphUtils.java | 93 ++++++++++++++++++++++++++++++++++++ untitled/src/Main.java | 26 ++++++++++ 3 files changed, 152 insertions(+) create mode 100644 untitled/src/GraphNode.java create mode 100644 untitled/src/GraphUtils.java create mode 100644 untitled/src/Main.java diff --git a/untitled/src/GraphNode.java b/untitled/src/GraphNode.java new file mode 100644 index 0000000..9b014c4 --- /dev/null +++ b/untitled/src/GraphNode.java @@ -0,0 +1,33 @@ +public class GraphNode { + private int id; + private boolean isVisited; + + public GraphNode(int id) { + this.id = id; + this.isVisited = false; + } + + @Override + public String toString() { + return "GraphNode{" + + "id=" + id + + ", isVisited=" + isVisited + + '}'; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public boolean isVisited() { + return isVisited; + } + + public void setVisited(boolean visited) { + isVisited = visited; + } +} \ No newline at end of file diff --git a/untitled/src/GraphUtils.java b/untitled/src/GraphUtils.java new file mode 100644 index 0000000..6ed16d9 --- /dev/null +++ b/untitled/src/GraphUtils.java @@ -0,0 +1,93 @@ +import java.util.ArrayList; +import java.util.List; + + +public class GraphUtils { + + /** + * 邻接表转邻接矩阵 + * + * @param lists 邻接表 + * @return 邻接矩阵 + */ + public static int[][] tableToMatrix(List> lists) { + int len = lists.size(); + int[][] matrix = new int[len][len]; + for (int i = 0; i < len; i++) { + List list = lists.get(i); + for (GraphNode node : list) { + matrix[i][node.getId()] = 1; + } + } + return matrix; + } + + /** + * 邻接矩阵转邻接表 + * + * @param matrix 邻接矩阵 + * @return 邻接表 + */ + public static List> matrixToTable(int[][] matrix) { + List> lists = new ArrayList<>(); + GraphNode[] nodes = new GraphNode[matrix.length]; + for (int i = 0; i < nodes.length; i++) { + nodes[i] = new GraphNode(i); + } + for (int[] ints : matrix) { + List list = new ArrayList<>(); + for (int j = 0; j < ints.length; j++) { + if (ints[j] != 0) { + list.add(nodes[j]); + } + } + lists.add(list); + } + return lists; + } + + /** + * 深度优先遍历 + * + * @param lists 邻接表 + */ + public static void depthFirstTraversal(List> lists) { + for (int i = 0; i < lists.size(); i++) { + List list = lists.get(i); + for (int j = 0; j < list.size(); j++) { + depthFirstTraversal(lists, list.get(j)); + } + } + } + + private static void depthFirstTraversal(List> lists, GraphNode node) { + if (!node.isVisited()) { + node.setVisited(true); + System.out.print(node.getId() + " "); + List list = lists.get(node.getId()); + for (int i = 0; i < list.size(); i++) { + depthFirstTraversal(lists, list.get(i)); + } + } + } + + /** + * 广度优先遍历 + * + * @param lists + */ + public static void breadthFirstTraversal(List> lists) { + for (int i = 0; i < lists.size(); i++) { + List list = lists.get(i); + for (int j = 0; j < list.size(); j++) { + GraphNode node = list.get(j); + if (!node.isVisited()) { + node.setVisited(true); + System.out.print(node.getId() + " "); + } + } + } + } + + +} \ No newline at end of file diff --git a/untitled/src/Main.java b/untitled/src/Main.java new file mode 100644 index 0000000..8200168 --- /dev/null +++ b/untitled/src/Main.java @@ -0,0 +1,26 @@ +import java.util.List; + +public class Main { + public static void main(String[] args) { + int[][] table = { + {0, 0, 0, 1, 0, 0}, + {0, 0, 0, 1, 1, 0}, + {1, 0, 0, 1, 0, 1}, + {0, 1, 0, 0, 1, 0}, + {0, 0, 0, 1, 0, 1}, + {0, 0, 1, 0, 1, 0} + }; + List> lists = GraphUtils.matrixToTable(table); + int[][] table2 = GraphUtils.tableToMatrix(lists); + for (int i = 0; i < table2.length; i++) { + for (int j = 0; j < table2[i].length; j++) { + System.out.print(table2[i][j] + ", "); + } + System.out.println(); + } + System.out.print("深度优先遍历: "); + GraphUtils.depthFirstTraversal(GraphUtils.matrixToTable(table)); + System.out.print("\n广度优先遍历: "); + GraphUtils.breadthFirstTraversal(GraphUtils.matrixToTable(table)); + } +} \ No newline at end of file -- Gitee