加权有向图的实现
如果有问题可以参考加权有向图的介绍:加权有向图介绍
API设计
import cn.itcast.demo.day02.linear.Queue;
public class EdgeWeightedDigraph {
//顶点数目
private final int V;
//边的数目
private int E;
//邻接表
private Queue<DirectedEdge>[] adj;
//创建一个含有v个顶点的空加权有向图
public EdgeWeightedDigraph(int V){
//初始化顶点的数量
this.V = V;
//初始化边的数量
this.E = 0;
//初始化领接表
this.adj = new Queue[V];
for (int i = 0; i < adj.length; i++){
adj[i] = new Queue<DirectedEdge>();
}
}
/**
* 获取图中顶点的数量
* @return
*/
public int V(){
return V;
}
/**
* 获取图中边的数量
* @return
*/
public int E(){
return E;
}
/**
* 向加权有向图添加一条边e
* @param e
*/
public void addEdge(DirectedEdge e){
//边e是有方向的,所以只需要让e出现在起点的邻接表中即可
int v = e.from();
adj[v].enQueue(e);
E++;
}
/**
* 获取由定点v指出的所有的边
* @return
*/
public Queue<DirectedEdge> edges(){
//遍历图中的每一个顶点,得到该顶点的邻接表
//遍历得到每一条边,添加到队列中返回即可
Queue<DirectedEdge> allEdges = new Queue<>();
for(int v = 0; v < V; v++){
for (DirectedEdge directedEdge : adj[v]) {
allEdges.enQueue(directedEdge);
}
}
return allEdges;
}
}