有向图的定义及Java实现

本文介绍了有向图的基本概念及其在Java中的实现方法,包括有向图的定义、相关术语如出度和入度等,并详细展示了如何用邻接表实现有向图结构。

1 定义

在实际生活中,很多图都具有方向性,比如互联网,从A页面通过链接跳转到B页面,A和B的连接就有方向A->B,就需要使用有向图来表达。

在这里插入图片描述
定义:有向图是具有方向性的图,由一组顶点和一组有方向的边组成,每条方向的边都连着一对有序的顶点。

2 相关术语

  1. 出度:由某个顶点指出的边的个数;
  2. 入度:指向某个顶点的边的个数;
  3. 有向路径:由一系列顶点组成,其中的每个顶点都存在一条有向边,从它指向序列中的下一个顶点;
  4. 有向环:至少含有一条边,且起点和终点相同的有向路径;

在这里插入图片描述
两个顶点v和w可能存在的4种关系:

  1. 没有边相连;
  2. 存在从v到w的边v->w;
  3. 存在从w到v的边w->v;
  4. 既存在v->w,也存在w->v,即双向连接;

3 Java实现

public class Digraph {
    //顶点数目
    private final int V;
    //边的数目
    private int E;
    //邻接表
    private Deque<Integer>[] adj;

    public Digraph(int V){
        //初始化顶点数量
        this.V = V;
        //初始化边的数量
        this.E = 0;
        //初始化邻接表
        this.adj = new Deque[V];
        for (int i = 0; i < adj.length; i++) {
            adj[i] = new LinkedList<>();
        }

    }

    //获取顶点数目
    public int V(){
        return V;
    }

    //获取边的数目
    public int E(){
        return E;
    }

    //向有向图中添加一条边 v->w
    public void addEdge(int v, int w) {
        //只需要让顶点w出现在顶点v的邻接表中,因为边是有方向的,最终,顶点v的邻接表中存储的相邻顶点的含义是: v->其他顶点
        adj[v].offer(w);
        E++;
    }

    //获取由v指出的边所连接的所有顶点
    public Deque<Integer> adj(int v){
        return adj[v];
    }

    //该图的反向图
    private Digraph reverse(){
        //创建有向图对象
        Digraph r = new Digraph(V);
        for (int v=0; v<V; v++){
            //获取由该顶点v指出的所有边
            for (Integer w : adj[v]) {//原图中表示的是由顶点v->w的边
                r.addEdge(w,v);//w->v
            }
        }
        return r;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellosc01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值