图——加权有向图

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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值