早教吧作业答案频道 -->其他-->
一个数据结构(java版)问题?分别对以邻接矩阵和邻接表存储的有向图,实现下列操作(1)求图中的边数(2)求各顶点的入度和出度(3)判断任意两个顶点之间是否存在一条路径,若有给出
题目详情
一个数据结构(java版)问题?
分别对以邻接矩阵和邻接表存储的有向图,实现下列操作
(1)求图中的边数
(2)求各顶点的入度和出度
(3) 判断任意两个顶点之间是否存在一条路径,若有给出路径长度
分别对以邻接矩阵和邻接表存储的有向图,实现下列操作
(1)求图中的边数
(2)求各顶点的入度和出度
(3) 判断任意两个顶点之间是否存在一条路径,若有给出路径长度
▼优质解答
答案和解析
我这个写的很简单,对于G=(V,E),各个顶点是以从1~V的连续数字来表示的,存数邻接表采用的是一个2维数组:
import java.util.*;
public class test {
public static void main(String [] args) {
// 以邻接表数组初始化有向图
digraph dg = new digraph(
new int[]{1,2,3},
new int[]{2,3},
new int[]{3,4},
new int[]{4,2,5},
new int[]{5,2}
);
dg.adjListPresent();
dg.adjMatrixPresent();
System.out.println("Edges: " + dg.getEdges());
System.out.print("In-Degree:\t");
for(int t : dg.getAdjHeads()) // 输出每个顶点的入度
System.out.print(t + "=" + dg.getInDegree(t) + " ");
System.out.println();
System.out.print("Out-Degree:\t");
for(int t : dg.getAdjHeads()) // 输出每个顶点的出度
System.out.print(t + "=" + dg.getOutDegree(t) + " ");
System.out.println();
dg.searchPath(1, 5);
}
}
// 有向图类
class digraph {
int [][] g;
int edges;
int heads;
public digraph(int[]...a){
int i = 0;
edges = 0;
heads = a.length;
g = new int[heads][];
for(int[] e : a) {
g[i++] = e;
edges += e.length - 1;
}
}
// 邻接表
public void adjListPresent() {
System.out.println("AdjList:");
for(int e[] : g) {
for(int i = 0; i < e.length; ++i)
System.out.print(e[i]+(i == e.length-1 ? "" : "->"));
System.out.println();
}
}
import java.util.*;
public class test {
public static void main(String [] args) {
// 以邻接表数组初始化有向图
digraph dg = new digraph(
new int[]{1,2,3},
new int[]{2,3},
new int[]{3,4},
new int[]{4,2,5},
new int[]{5,2}
);
dg.adjListPresent();
dg.adjMatrixPresent();
System.out.println("Edges: " + dg.getEdges());
System.out.print("In-Degree:\t");
for(int t : dg.getAdjHeads()) // 输出每个顶点的入度
System.out.print(t + "=" + dg.getInDegree(t) + " ");
System.out.println();
System.out.print("Out-Degree:\t");
for(int t : dg.getAdjHeads()) // 输出每个顶点的出度
System.out.print(t + "=" + dg.getOutDegree(t) + " ");
System.out.println();
dg.searchPath(1, 5);
}
}
// 有向图类
class digraph {
int [][] g;
int edges;
int heads;
public digraph(int[]...a){
int i = 0;
edges = 0;
heads = a.length;
g = new int[heads][];
for(int[] e : a) {
g[i++] = e;
edges += e.length - 1;
}
}
// 邻接表
public void adjListPresent() {
System.out.println("AdjList:");
for(int e[] : g) {
for(int i = 0; i < e.length; ++i)
System.out.print(e[i]+(i == e.length-1 ? "" : "->"));
System.out.println();
}
}
看了 一个数据结构(java版)问...的网友还看了以下:
对于一个具有n个结点和e条边的无向图,若采用邻接表表示,则顶点表的大小为(20),所有边链表中边结 2020-05-26 …
数据结构中关于图拓扑排序算法有个地方不太明白希望能得到解答我先把整个算法写下了吧StatusTop 2020-06-06 …
图的邻接表存储结构表头结点后面跟的邻接结点的排列先后顺序有要求吗?比方说结点A有三个邻接结点:BC 2020-06-08 …
无向图是不是没有逆邻接表?老师出了个题目,叫写出无向图的邻接表和逆邻接表. 2020-06-08 …
邻接表加边的算法如何写?在一个带权的有向图中,采用邻接表存储结构,采用出边表,即某个顶点的邻接边表 2020-06-17 …
一个数据结构(java版)问题?分别对以邻接矩阵和邻接表存储的有向图,实现下列操作(1)求图中的边 2020-07-17 …
求解释,逆邻接表和邻接表的比较对于一个有向图,若一个顶点的入度为k1,出度为k2,则对应逆邻接表中 2020-08-02 …
仿写句子1海内存知己天涯若比邻2少壮不努力老大徒伤悲3人生自古谁无死留取丹心照汗青4纸上得来终觉浅绝 2020-11-29 …
对下面给出的数据序列,构造一棵哈夫曼树,并求出其带权路径长度.4,5,6,7,10,12,15,18 2020-12-05 …
图的邻接表的时间复杂度问题建立邻接表的时间复杂度为O(n*e)。若顶点信息即为顶点的下标,则时间复杂 2020-12-19 …