图论 基础篇

本文介绍了图的定义,图的表示方法如邻接表和邻接矩阵,并探讨了有向图、无向图、稀疏图和稠密图。接着讲解了常见的图处理方式,包括计算顶点度数、最大度数以及自环个数,这些都是图论算法的基础内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 图的介绍

说起图这个词,很多人可能首先会想到的就是图片,地图……等,但这里所说的图是一个抽象的概念。

定义:图是由一组顶点和一组能将两个顶点相连的边组成的。

图论一直以来都是数学领域的一个重要分支,但在计算机科学领域的应用中,基于图论的由一系列结点和边的模型起到了非常重要的作用,图的算法能够解决实际生活中许多比较复杂的问题,例如我们的地图、电路、社会中人与人之间的关系网已级计算机网络等无法通过一般的数据结构来描述的。所以它也是许多高级算法的基石,直到现在图论算法的研究一直在进行,因为仍有许多领域无法解决的问题。这里就总结一些图的基础算法。

二. 图的表示

图的分类有很多,按方向可分为有向图和无向图,按密度可分为稀疏图和稠密图。
而对于稀疏图一般的表示方法就是邻接表,而对于稠密图一般的表示就是邻接矩阵。这里对于有向性我们可以用一个简单的布尔类型的变量来表示,然后用int型的变量v、e分别表示顶点和边。
首先是稀疏图的表示,看看如下代码

// 稀疏图 - 邻接表
public class SparseGraph {
   
   

    private int v;  // 节点数
    private int e;  // 边数
    private boolean directed;    // 是否为有向图
    private Vector<Integer>[] g; // 图的具体数据

    // 构造函数
    public SparseGraph( int n , boolean directed ){
        assert n >= 0;
        this.v = v;
        this.e = e;    // 初始化没有任何边
        this.directed = directed;
        // g初始化为n个空的vector, 表示每一个g[i]都为空, 即没有任和边
        g = (Vector<Integer>[])new Vector[n];
        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值