有向图
1、术语
在有向图中,边是单向的。每条边所连接的两个顶点都是一个有序对,他们的邻接性是单向的。
出度:该顶点指出的边的总数
入度:指向该顶点的边的总数
一条有向边的第一个顶点称为它的头,第二个顶点称为它的尾。将有向边画为由头指向尾的一个箭头。
用 v -> w 表示有向图中一条由v指向w的边。
有向路径
有向环
简单有向环:除了起点和终点必须相同之外,不含有重复的顶点和边的环
路径或环的长度即为其中所包含的边数。
有向图的可达性:当存在从v到w的路径时,称顶点w能够由顶点v达到。
无向图的连通性
2、有向图的数据结构
有向图的API
reverse() 方法,返回该有向图的一个副本,但将其中所有边的方向反转。这样用例就可以找出指向每个顶点的所有边。
有向图的表示:邻接表。边 v -> w 表示为顶点v所对应的邻接链表中包含一个w顶点。
在用邻接表表示无向图时,如果v 在w 的链表中,那么w必然也在v的链表中。但在有向图中这种对称性是不存在的,因为每条边都只会出现一次。
有向图的数据结构
Digraph数据类型与Graph数据类型基本相同。区别是 addEdge() 只调用了一次 add(),而且它还有一个 reverse() 方法来返回图的反向图。
/*DiGraph数据类型*/
public class DiGraph{
private final int V; //顶点数目
private int E; //边的数目
private Bag<Integer>[] adj; //邻接表
public DiGraph(int V){
this.V = V; this.E = 0;
adj = (Bag<Integer>[]) new Bag[V]; //创建邻