From 60a7c8112ceb4ee00ec7b1a0dc2e088cc6abff83 Mon Sep 17 00:00:00 2001 From: email Date: Sun, 10 Jan 2021 22:35:58 +0800 Subject: [PATCH] work2 --- .../com/company/EdgeElement.java" | 44 +++++++++ .../com/company/EdgeNode.java" | 39 ++++++++ .../com/company/Graph.java" | 31 ++++++ .../com/company/graphTraverse.java" | 99 +++++++++++++++++++ 4 files changed, 213 insertions(+) create mode 100644 "\345\256\211\350\257\246\345\234\260\344\275\234\344\270\232\345\223\245!/com/company/EdgeElement.java" create mode 100644 "\345\256\211\350\257\246\345\234\260\344\275\234\344\270\232\345\223\245!/com/company/EdgeNode.java" create mode 100644 "\345\256\211\350\257\246\345\234\260\344\275\234\344\270\232\345\223\245!/com/company/Graph.java" create mode 100644 "\345\256\211\350\257\246\345\234\260\344\275\234\344\270\232\345\223\245!/com/company/graphTraverse.java" diff --git "a/\345\256\211\350\257\246\345\234\260\344\275\234\344\270\232\345\223\245!/com/company/EdgeElement.java" "b/\345\256\211\350\257\246\345\234\260\344\275\234\344\270\232\345\223\245!/com/company/EdgeElement.java" new file mode 100644 index 0000000..665dbd1 --- /dev/null +++ "b/\345\256\211\350\257\246\345\234\260\344\275\234\344\270\232\345\223\245!/com/company/EdgeElement.java" @@ -0,0 +1,44 @@ +package com.company; + + + +//边集数组 ,存放边的信息 + +//邻域数组表示 和 邻域表表示 是两种不同的表示方式 + +//表示的是插入边的元素,边的起点和终点 边的权重 + +public class EdgeElement { + + int fromvex; + + int endvex; + + int weight; + + + public EdgeElement(int v1,int v2){ + +//对于无权重图的初始化 + + fromvex=v1; + + endvex=v2; + + weight=1; + + } + + public EdgeElement(int v1,int v2,int wgt){ + +//对于有权重图的初始化 + + fromvex=v1; + + endvex=v2; + + weight=wgt; + + } + +} \ No newline at end of file diff --git "a/\345\256\211\350\257\246\345\234\260\344\275\234\344\270\232\345\223\245!/com/company/EdgeNode.java" "b/\345\256\211\350\257\246\345\234\260\344\275\234\344\270\232\345\223\245!/com/company/EdgeNode.java" new file mode 100644 index 0000000..6530559 --- /dev/null +++ "b/\345\256\211\350\257\246\345\234\260\344\275\234\344\270\232\345\223\245!/com/company/EdgeNode.java" @@ -0,0 +1,39 @@ +package com.company; + +//定义邻接表类型 + +public class EdgeNode{ + +//需要一个存储自身结点 + + int adjvex; + + int weight; + + EdgeNode next; + +//无权图 + + public EdgeNode(int adj,EdgeNode nt){ + + this.adjvex=adj; + + this.next=nt; + + this.weight=1; + + } + +//有权图 + + public EdgeNode(int adj,int wgt,EdgeNode nt){ + + this.adjvex=adj; + + this.weight=wgt; + + this.next=nt; + + } + +} \ No newline at end of file diff --git "a/\345\256\211\350\257\246\345\234\260\344\275\234\344\270\232\345\223\245!/com/company/Graph.java" "b/\345\256\211\350\257\246\345\234\260\344\275\234\344\270\232\345\223\245!/com/company/Graph.java" new file mode 100644 index 0000000..2c6d804 --- /dev/null +++ "b/\345\256\211\350\257\246\345\234\260\344\275\234\344\270\232\345\223\245!/com/company/Graph.java" @@ -0,0 +1,31 @@ +package com.company; + +public interface Graph { + + void creatGraph(EdgeElement d[]); //通过边结点来构建一个图 + + Graph graphType(); //返回图的类型 无向无权图 无向有权图 有向无权图 有向有权图 定义一个枚举变量 + + int vertices(); //返回图的顶点数 + + int edges(); //返回图的边数 + + boolean find(int i,int j); //从图中查找一条边(i,j)是否存在 + + void putEdge(EdgeElement theEdge); //像图中插入一条边 theEdge + + void removeEdge(int i,int j); //从图中删除一条边 + + int degree(int i); //返回顶点i的度 + + int inDegree(int i); //返回顶点i的入度 + + int outDegree(int i); //返回顶点i的出度 + + void output(); //以图的顶点集和边集的形式输出一个图 + + void depthFirstSearch(int v); //从顶点v开始深度优先搜索整幅图 + + void breadthFirstSearch(int v); //从顶点v开始广度优先搜索整幅图 + +} \ No newline at end of file diff --git "a/\345\256\211\350\257\246\345\234\260\344\275\234\344\270\232\345\223\245!/com/company/graphTraverse.java" "b/\345\256\211\350\257\246\345\234\260\344\275\234\344\270\232\345\223\245!/com/company/graphTraverse.java" new file mode 100644 index 0000000..85a6666 --- /dev/null +++ "b/\345\256\211\350\257\246\345\234\260\344\275\234\344\270\232\345\223\245!/com/company/graphTraverse.java" @@ -0,0 +1,99 @@ +package com.company; + +import java.util.LinkedList; +import java.util.Queue; + +public class graphTraverse { + + private static String[] node; //存储节点编号 + private static int[][] arc; //存储边 + private static boolean[] flag;//存储节点是否被访问过 + + //深度优先遍历 + private void depthFirstTraversal() + { + flag = new boolean[node.length]; + for( int i=0;i qu = new LinkedList(); + /*Queue是接口,只能new一个它的实现类, + LinkedList实现了Queue */ + flag = new boolean[node.length]; + for( int i=0;i