diff --git a/GraphNode.java b/GraphNode.java new file mode 100644 index 0000000000000000000000000000000000000000..9b014c43dc724755ddef25bc3c00862d9cf9138f --- /dev/null +++ b/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/GraphUtils.java b/GraphUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..deff738fd0d6e33838a2b98ddc4b6ccd82418109 --- /dev/null +++ b/GraphUtils.java @@ -0,0 +1,73 @@ +import java.util.ArrayList; +import java.util.List; + +public class GraphUtils { + + 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; + } + + + 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; + } + + + 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)); + } + } + } + + + 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/Main.java b/Main.java new file mode 100644 index 0000000000000000000000000000000000000000..b1d43b1bbc99881db6cd75932de9fa3991475e92 --- /dev/null +++ b/Main.java @@ -0,0 +1,28 @@ +import java.util.ArrayList; +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 diff --git a/README.md b/README.md index c7dc5aa5bba1afbc05a618946e230510e5bfd2c2..7c746b86f53960d3119d671558e6b29633ff82a6 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ ### 鎴鏃ユ湡 -2021.1.6 +2021.1.13 ### 鍩虹