【alg4-最短路径】加权有向图

加权有向边的API

API功能
double weight()边的权重
int from()指出这条边的顶点
int to()这条边指向的顶点
String toString()对象的字符串表示

加权有向图的API

API功能
EdgeWeightedDigraph(int V)含有V个顶点的空有向图
EdgeWeightedDigraph(int vn, int en, int[][] data, double[] weights)读取图的构造函数
int V()顶点总数
int E()边的总数
void addEdge(DirectedEdge e)将e添加到该有向图中
Iterable<DirectedEdge> adj(int v)从v指出的边
Iterable<DirectedEdge> edges()该有向图中的所有边
String toString()对象的字符串表示

实现

DirectedEdge.java

package section4_4;

public class DirectedEdge {

    private final int v;
    private final int w;
    private final double 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;
    }

    public String toString() {
        return String.format("%d->%d %.2f",v,w,weight);
    }

}

EdgeWeightedDigraph.java

package section4_4;

import section1_3.Bag;

public class EdgeWeightedDigraph {

    private final int V;
    private int E;
    private Bag<DirectedEdge>[] adj;

    public EdgeWeightedDigraph(int V) {
        this.V = V;
        this.E = 0;
        adj = (Bag<DirectedEdge>[]) new Bag[V];
        for (int v = 0;v < V;v++) {
            adj[v] = new Bag<>();
        }
    }

    public EdgeWeightedDigraph(int vn, int en, int[][] data, double[] weights) {
        this(vn);
        for (int i = 0;i < en;i++) {
            DirectedEdge edge = new DirectedEdge(data[i][0],data[i][1],weights[i]);
            addEdge(edge);
        }
    }

    public int V() {
        return V;
    }

    public int E() {
        return E;
    }

    public void addEdge(DirectedEdge e) {
        adj[e.from()].add(e);
        E++;
    }

    public Iterable<DirectedEdge> adj(int v) {
        return adj[v];
    }

    public Iterable<DirectedEdge> edges() {
        Bag<DirectedEdge> bag = new Bag<>();
        for (int v = 0;v < V;v++) {
            for (DirectedEdge e : adj[v]) {
                bag.add(e);
            }
        }
        return bag;
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值