图的基本算法

本文介绍了图的两种表示方法——邻接表和邻接矩阵,重点讲述了邻接表在有向图和无向图中的应用,以及如何在邻接表中表示加权图。此外,还详细讨论了广度优先搜索(BFS)和深度优先搜索(DFS)算法,包括它们在C/C++中的实现。最后,提到了拓扑排序的概念,它是基于深度优先搜索的一种应用,特别是在有向无回路图(DAG)中的应用。
摘要由CSDN通过智能技术生成

一、图的表示

        要表示一个图G=<V,E>,有两种标准方法,即邻接表和邻接矩阵。这两种表示法既可用于有向图,也可用于无向图。通常采用邻接表表示法,因为用这种方法表示稀疏图(图中边数远比点个数要少)比较紧凑。但当遇到稠密图(|E|接近于|V|^2)或必须很快判断两个给定顶点是否存在连接边时,通常采用邻接矩阵形式。





     图G=<V,E>的邻接表表示是由一个包含|V|个列表的数组Adj所组成,其中每个列表对应于V中的一个顶点。对于每一个u∈V,邻接表Adj[u]包含所有满足条件(u,v)∈E的顶点v。亦即,Adj[u]包含图G中所有和顶点u相邻的顶点。每个邻接表中的顶点一般以任意顺序存储。

    如果G是一个有向图,则所有;邻接表的长度之和为|E|,这是因为一条形如(u,v)的边是通过让v出现在Adj[u]中来表示的。如果G是一个无向图,则所有邻接表的长度之和为2|E|,因为如果(u,v)是一条无向边,那么u会出现在v的邻接表中,反之亦然。邻接表需要的存储空间为O(V+E)。

    邻接表稍作变动,即可用来表示加权图,即每条边都有着相应权值的图,权值通常由加权函数w:E→R给出。例如,设G=<V,E>是一个加权函数为w的加权图。对没一条边(u,v)∈E,权值w(u,v)和顶点v一起存储在u的邻接表中。


邻接表C/C++实现:

#include <iostream>
using namespace std;

#define maxn 100
int n, m;  //图的顶点个数和边的条数
struct arcnode    //边结点
{
    int vertex;  //与表头结点相邻的结点编号
    int
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值