关于图论的一点心得

图的定义

简单来说,图 就是一个结点的集合 和边的集合 ,其中任意一条边都可以表示为两个结点之间的关系。
有向边与无向边
如果边对结点的关系是双向的,那么这条边是无向边;如果是单向的,那么这条边是有向边。
图是怎么存的,get到以下几种做法。

1.临接矩阵

(二维的数组,s[i][j]表示i点与j点的距离。)
但显然需要占用很大多余的空间。对于一个稀疏的图(边相对于点数的平方比较少)来说,用邻接矩阵来存的话,成本偏高。
2.邻接表
采用邻接表就可以很大程度的节约空间
常见的两种的写法

s[i][1]=j;
s[i][2]=p; 表示i与j,p之间分别存在一条边。

vector adj[i]用来存以i为始点的边
但用vector无法科学的删除,因此常用 list。
它的特点是可以用来按顺序访问一个结点的出边(或者入边)??

一些跟图有关的定义
路径
path,是指一个边的序列,其中的边首尾相连。

简单路径
simple path,是每条边只经过了一次的路径。

回路
cycle,也称为 环 ,是起点和终点相同的路径。
简单回路
图的定点序列中,除了起点和终点相同外,其余顶点不重复的回路。

连通
两个点连通
无向图中点 和 连通是指存在一条 到 的路径。

图连通
如果无向图 中任意两个节点连通,称其为是连通的。

路径的长度
一般来说,路径的长度在数值上等于路径的边数,或者如果边是带权的,则是路径的边权和。
由此引出我们常见的图论问题。
《最短路径》问题
两个节点之间最短的路径;
注:不一定存在,不一定唯一。
解决最短路径问题介绍两种 算法:
Floyd 算法
是用来求任意两个结点之间的最短路的。

复杂度比较高,但是常数小,容易实现。但采用了三个for循环,当数据达到1e3时已经超时

适用于任何图,不管有向无向,边权正负,但是最短路必须存在。(不能有个负环)
代码实现

  for (k = 1; k <= n; k++) {
   
      for (i = 1; i <= n; i++) {
   
        for (j = 1; j <= n
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值