加权有向图的实现(详解)

加权有向图的实现

如果有问题可以参考加权有向图的介绍:加权有向图介绍
API设计
加权有向图的实现(详解)_第1张图片

import cn.itcast.demo.day02.linear.Queue;

public class EdgeWeightedDigraph {
    //顶点数目
    private final int V;
    //边的数目
    private int E;
    //邻接表
    private Queue[] 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();
        }

    }

    /**
     * 获取图中顶点的数量
     * @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 edges(){
        //遍历图中的每一个顶点,得到该顶点的邻接表
        //遍历得到每一条边,添加到队列中返回即可
        Queue allEdges = new Queue<>();
        for(int v = 0; v < V; v++){
            for (DirectedEdge directedEdge : adj[v]) {
                allEdges.enQueue(directedEdge);
            }
        }
        return allEdges;
    }
}

你可能感兴趣的:(数据结构)