From 6dd33310d3b9ba9e47e1fb2e44b65ac78283f3ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E7=BF=8A=E5=B3=B0?= <1214660704@qq.com> Date: Fri, 8 Jan 2021 21:45:27 +0800 Subject: [PATCH] 14 --- .../MatrixExpression/MatrixExpression.java" | 35 +++++ .../MatrixExpression/MyAdjGraphic.java" | 110 +++++++++++++ .../MatrixExpression/Weight.java" | 29 ++++ .../MatrixTable/CreateGraph.java" | 101 ++++++++++++ .../MatrixTable/CreateGraph1.java" | 97 ++++++++++++ "\344\275\234\344\270\232/Traversal/T.java" | 148 ++++++++++++++++++ 6 files changed, 520 insertions(+) create mode 100644 "\344\275\234\344\270\232/MatrixExpression/MatrixExpression.java" create mode 100644 "\344\275\234\344\270\232/MatrixExpression/MyAdjGraphic.java" create mode 100644 "\344\275\234\344\270\232/MatrixExpression/Weight.java" create mode 100644 "\344\275\234\344\270\232/MatrixTable/CreateGraph.java" create mode 100644 "\344\275\234\344\270\232/MatrixTable/CreateGraph1.java" create mode 100644 "\344\275\234\344\270\232/Traversal/T.java" diff --git "a/\344\275\234\344\270\232/MatrixExpression/MatrixExpression.java" "b/\344\275\234\344\270\232/MatrixExpression/MatrixExpression.java" new file mode 100644 index 0000000..e1b36c0 --- /dev/null +++ "b/\344\275\234\344\270\232/MatrixExpression/MatrixExpression.java" @@ -0,0 +1,35 @@ +package MatrixExpression; + +import MatrixExpression.MyAdjGraphic; +import MatrixExpression.Weight; + +public class MatrixExpression { + + public static void main(String[] args) { + + int n=5; + int e=5; + + MyAdjGraphic g = new MyAdjGraphic(n); + Object[] vertices = new Object[]{new Character('A'),new Character('B'),new Character('C'),new Character('D'),new Character('E')}; + Weight[] weights = new Weight[]{new Weight(0,1,10),new Weight(0,4,20),new Weight(2,1,40),new Weight(1,3,30),new Weight(3,2,50)}; + try + { + Weight.createAdjGraphic(g, vertices, n, weights, e); + System.out.println("领接矩阵:"); + g.print(); + System.out.println("结点的个数:"+g.getNumOfVertice()); + System.out.println("边的个数:"+g.getNumOfEdges()); + g.deleteEdges(0, 4); + System.out.println("删除:"); + g.print(); + System.out.println("结点的个数:"+g.getNumOfVertice()); + System.out.println("边的个数:"+g.getNumOfEdges()); + } + catch(Exception ex) + { + + } + } + +} \ No newline at end of file diff --git "a/\344\275\234\344\270\232/MatrixExpression/MyAdjGraphic.java" "b/\344\275\234\344\270\232/MatrixExpression/MyAdjGraphic.java" new file mode 100644 index 0000000..be0333c --- /dev/null +++ "b/\344\275\234\344\270\232/MatrixExpression/MyAdjGraphic.java" @@ -0,0 +1,110 @@ +package MatrixExpression; + +import java.util.ArrayList; + +public class MyAdjGraphic { + + static final int maxWeight=-1; + ArrayList vertices = new ArrayList(); + int[][] edges; + int numOfEdges; + + public MyAdjGraphic(int n) + { + edges = new int[n][n]; + for(int i=0;i= vertices.size())||(v2 < 0||v2 >= vertices.size())) + { + throw new Exception("v1或者v2参数越界错误!"); + } + return this.edges[v1][v2]; + + } + + + public void insertVertice(Object obj) + { + this.vertices.add(obj); + } + + + public void insertEdges(int v1,int v2,int weight) throws Exception + { + if((v1 < 0 || v1 >= vertices.size())||(v2 < 0||v2 >= vertices.size())) + { + throw new Exception("v1或者v2参数越界错误!"); + } + + this.edges[v1][v2]=weight; + this.numOfEdges++; + } + + + public void deleteEdges(int v1,int v2) throws Exception + { + if((v1 < 0 || v1 >= vertices.size())||(v2 < 0||v2 >= vertices.size())) + { + throw new Exception("v1或者v2参数越界错误!"); + } + if( v1==v2 || this.edges[v1][v2]==maxWeight)//自己到自己的边或者边不存在则不用删除。 + { + throw new Exception("边不存在!"); + } + + this.edges[v1][v2]=maxWeight; + this.numOfEdges--; + } + + + public void print() + { + for(int i=0;i"); + if (vertexNodeList[i].firstedge != null) { + EdgeNode mEdgeNode = new EdgeNode(); + mEdgeNode = vertexNodeList[i].firstedge; + System.out.print(mEdgeNode.adjvex); + while (mEdgeNode.next != null) { + mEdgeNode = mEdgeNode.next; + System.out.print(mEdgeNode.adjvex); + } + System.out.print("\n"); + } else { + System.out.print("\n"); + } + } + } + + + public static void main(String args[]) { + + char[] vexs = { + 'A', 'B', 'C', 'D' + }; + + char[][] edges = new char[][] { + { + 'A', 'B' + }, { + 'A', 'C' + }, { + 'A', 'D' + }, { + 'B', 'D' + }, { + 'C', 'D' + } + }; + + CreateGraph listUDG = new CreateGraph(vexs, edges); + listUDG.print(); + } +} \ No newline at end of file diff --git "a/\344\275\234\344\270\232/MatrixTable/CreateGraph1.java" "b/\344\275\234\344\270\232/MatrixTable/CreateGraph1.java" new file mode 100644 index 0000000..527daf3 --- /dev/null +++ "b/\344\275\234\344\270\232/MatrixTable/CreateGraph1.java" @@ -0,0 +1,97 @@ +package MatrixTable; + + +public class CreateGraph1 { + int vlen; + int elen; + VertexNode[] vertexNodeList; + EdgeNode edgeNode; + + + public CreateGraph1(char[] vexs, char[][] edges) { + vlen = vexs.length; + elen = edges.length; + + vertexNodeList = new VertexNode[vlen]; + for (int i = 0; i < vlen; i++) { + vertexNodeList[i] = new VertexNode(); + vertexNodeList[i].vertex = vexs[i]; + vertexNodeList[i].firstedge = null; + } + + for (int i = 0; i < elen; i++) { + EdgeNode edgeNode = new EdgeNode(); + int vi = getPosition(edges[i][0], vexs); + int vj = getPosition(edges[i][1], vexs); + + edgeNode.adjvex = edges[i][1]; + edgeNode.next = vertexNodeList[vi].firstedge; + vertexNodeList[vi].firstedge = edgeNode; + } + } + + + private class VertexNode { + char vertex; + EdgeNode firstedge; + } + + + private class EdgeNode { + char adjvex; + EdgeNode next; + } + + + private int getPosition(char ch, char[] vexs) { + for (int i = 0; i < vlen; i++) + if (vexs[i] == ch) + return i; + return -1; + } + + + public void print() { + System.out.printf("AdjList:\n"); + for (int i = 0; i < vlen; i++) { + System.out.print(vertexNodeList[i].vertex + "-->"); + if (vertexNodeList[i].firstedge != null) { + EdgeNode mEdgeNode = new EdgeNode(); + mEdgeNode = vertexNodeList[i].firstedge; + System.out.print(mEdgeNode.adjvex); + while (mEdgeNode.next != null) { + mEdgeNode = mEdgeNode.next; + System.out.print(mEdgeNode.adjvex); + } + System.out.print("\n"); + } else { + System.out.print("\n"); + } + } + } + + + public static void main(String args[]) { + + char[] vexs = { + 'A', 'B', 'C', 'D' + }; + + char[][] edges = new char[][] { + { + 'A', 'B' + }, { + 'A', 'C' + }, { + 'A', 'D' + }, { + 'B', 'D' + }, { + 'C', 'D' + } + }; + + CreateGraph1 listDG = new CreateGraph1(vexs, edges); + listDG.print(); + } +} \ No newline at end of file diff --git "a/\344\275\234\344\270\232/Traversal/T.java" "b/\344\275\234\344\270\232/Traversal/T.java" new file mode 100644 index 0000000..40dad8e --- /dev/null +++ "b/\344\275\234\344\270\232/Traversal/T.java" @@ -0,0 +1,148 @@ +package Traversal; + +public class T { + private char[] mVexs; + private int[][] mMatrix; + public T(char[] vexs, char[][] edges){ + int vlen=vexs.length; + int elen=edges.length; + mVexs=new char[vlen]; + for(int i=0;i=0){ + if(visited[k]==false){ + visited[k]=true; + System.out.print(" "+mVexs[k]); + queue[rear++]=k; + } + k=nextVertex(j,k); + } + } + } + + + } + private void DFS() { + boolean[] visited=new boolean[mVexs.length]; + System.out.println("DFS:"); + for(int i=0;i=0){ + if(visited[w]==false){ + DFS(w,visited); + } + w=nextVertex(i,w); + } + i--; + } +} \ No newline at end of file -- Gitee