1.1 加权有向图边的表示
完整代码
//加权有向图的边
public class DirectedEdge {
private final int v;//起点
private final int w;//终点
private final double weight;//当前权重
// 通过顶点v和w,以及权重weight值构造一个边对象
public DirectedEdge(int v,int w,double weight){
this.v=v;
this.w=w;
this.weight=weight;
}
//获取边的权重值
public double weight() {
return weight;
}
//获取有向边的起点
public int from(){
return v;
}
//获取有向边的终点
public int to() {
return w;
}
}
1.2 加权有向图
构造方法
//顶点数目
private final int V;
//边的数目
private int E;
//邻接表
private Queue<DirectedEdge>[] adj;
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>();
}
}
获取加权有向图中所有的边
public Queue<DirectedEdge> edge(){
//创建一个队列对象,存储所有的边
Queue<DirectedEdge> alledges = new Queue<>();
//遍历图中的每一个顶点,找到邻接表,把边放在队列中
for (int v=0;v<V;v++){
for (DirectedEdge e : adj(v)) {
alledges.enqueue(e);
}
}
return alledges;
}
完整代码
public class EdgeWeightedDigraph {
//顶点数目
private final int V;
//边的数目
private int E;
//邻接表
private Queue<DirectedEdge>[] adj;
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>();
}
}
//获取顶点数目
public int getV(){
return V;
}
//获取边的数目
public int getE(){
return E;
}
//向图中添加一条边
public void addEdge(DirectedEdge e){
//获取起点
int v = e.from();
adj[v].enqueue(e);
//边的数量加一
E++;
}
//获取和顶点v相邻的所有边
public Queue<DirectedEdge> adj(int v){
return adj[v];
}
//获取加权有向图中所有的边
public Queue<DirectedEdge> edge(){
//创建一个队列对象,存储所有的边
Queue<DirectedEdge> alledges = new Queue<>();
//遍历图中的每一个顶点,找到邻接表,把边放在队列中
for (int v=0;v<V;v++){
for (DirectedEdge e : adj(v)) {
alledges.enqueue(e);
}
}
return alledges;
}
}
b站详细讲解网址:http://yun.itheima.com/course/639.html