当前位置: 首页 > news >正文

python图

有向图:图中的每条边都有方向的图叫有向图。此时,边的两个顶点有次序关系,有向边 < u,v>成为从顶点u到顶点v的一条弧,u成为弧尾(始点),v成为弧头(终点),即有向图中弧 < u,v>和弧 < v,u> 表示不同的两条边。

无向图:图中的每条边没有方向的图。边的两个顶点没有次序关系,无向图用边(u,v)表示对称弧< u,v>和< v,u>。

权:图中的边或弧上有附加的数量信息,这种可反映边或弧的某种特征的数据成为权。

网:图上的边或弧带权则称为网。可分为有向网和无向网。

邻接和关联:若边e=(u,v)或弧e= < u,v>,则称点u和v互为邻接顶点,并称边e或弧e关联于顶点u和v。

度:在无向图中,与顶点v关联的边的条数成为顶点v的度。有向图中,则以顶点v为弧尾的弧的条数成为顶点v的出度,以顶点v为弧头的弧的条数成为顶点v的入度,而顶点v的度=出度+入度。图中各点度数之和是边(或弧)的条数的2倍。

圈:图中联接同一个顶点的边叫圈。

平行边:图中两个顶点之间若有两条或两条以上的边,称这些边为平行边。

简单图:没有圈也没有平行边的图。

有向完全图:有n个顶点,n(n-1)条弧的有向图。每两个顶点之间都有两条方向相反的边连接的图。

完全图:有n个顶点,n(n-1)/2条边的无向图。若一个图的每一对不同顶点恰有一条边相连,则称为完全图。完全图是每对顶点之间都恰连有一条边的简单图。

路径长度:路径上边或弧的数目。若路径上的各顶点均不相同,则称这条路经为简单路经(或路),除第一个和最后一个顶点相同外,其他各顶点均不相同的路径成为回路(或环)。

连通图:在无向图G中,对与图中的任意两个顶点u、v都是连通的,则称图G为连通图。

强连通图:在有向图G中,如果对于每一对Vi和Vj 属于顶点集V,Vi不等于Vj ,从Vi到Vj和从Vj到Vi都存在路径,则称G是强连通图。

强连通分量:有向图中的极大强连通子图称做有向图的强连通分量。

生成树:一个连通图的生成树是一个极小的连通子图,它含有图中全部的n个顶点,但只有足以构成一棵树的n-1条边。

有向树:如果一个有向图恰有一个顶点的入度为0,其余顶点的入度为1,则是一棵有向树。

图的存储结构

图的存储结构,常用的是”邻接矩阵”和”邻接表”。

邻接矩阵

邻接矩阵是指用矩阵来表示图。它是采用矩阵来描述图中顶点之间的关系(及弧或边的权)。
假设图中顶点数为n,则邻接矩阵定义为:

下面通过示意图来进行解释。

图中的G1是无向图和它对应的邻接矩阵。

图中的G2是无向图和它对应的邻接矩阵。

通常采用两个数组来实现邻接矩阵:一个一维数组用来保存顶点信息,一个二维数组来用保存边的信息。
邻接矩阵的缺点就是比较耗费空间。

邻接表

邻接表是图的一种链式存储表示方法。它是改进后的”邻接矩阵”,它的缺点是不方便判断两个顶点之间是否有边,但是相对邻接矩阵来说更省空间。

图中的G1是无向图和它对应的邻接矩阵。

图中的G2是无向图和它对应的邻接矩阵。

图的python实现

在Python中,图主要是通过列表和词典来构造。

实现的功能:

  • 寻找一条路径
  • 查找所有的路径
  • 查找最短路径
'''
图的表示:

A --> B
 A --> C
 B --> C
 B --> D
 C --> D
 D --> C
 E --> F
 F --> C

'''
#找一条路
def find_path(graph,start,end,path=[]):
    path = path + [start]
    if start == end:
        return path
    if start not in graph.keys():
        return None
    for node in graph[start]:
        if node not in path:
            newpath = find_path(graph,node,end,path)
            if newpath:
                return newpath
    return path
if __name__ == '__main__':
    graph = {'A': ['B', 'C'],
             'B': ['C', 'D'],
             'C': ['D'],
             'D': ['C'],
             'E': ['F'],
             'F': ['C']}
    print(find_path(graph,'A','D'))

 

相关文章:

  • portraiture2024ps磨皮插件参数设置教程
  • 【51单片机系列】C51基础
  • 实用小算法
  • 西南科技大学814考研二
  • .Net8 Blazor 尝鲜
  • Android问题笔记四十五:解决SeekBar操作thumb周围产生的圆形阴影/灰色阴影/白色圆圈的解决办法
  • Shell脚本:Linux Shell脚本学习指南(第一部分Shell基础)一
  • 未来科技中的云计算之路
  • 【C/C++笔试练习】继承和派生的概念、虚函数的概念、派生类的析构函数、纯虚函数的概念、动态编译、多态的实现、参数解析、跳石板
  • 第五章 路由技术及应用
  • Linux yum 使用时提示 获取 GPG 密钥失败Couldn‘t open file RPM-GPG-KEY-EPEL-7
  • Linux下非root用户安装CUDA
  • Uni-App常用事件
  • C++知识点总结(6):高精度乘法真题代码
  • 时序预测 | Python实现ConvLSTM卷积长短期记忆神经网络股票价格预测(Conv1D-LSTM)
  • 微服务和Spring Cloud Alibaba介绍
  • 计算机毕业设计 基于SpringBoot的车辆网位置信息管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 基于SSM+Vue的校园共享单车管理系统
  • GFS分布式文件系统
  • Git企业开发级讲解(五)
  • 紫光集团原董事长赵伟国一审被判死缓
  • 习近平会见哥伦比亚总统佩特罗
  • 中国至越南河内国际道路运输线路正式开通
  • 人民日报任平:从汽车产销、外贸大盘看中国经济前景
  • 国务院关税税则委:调整对原产于美国的进口商品加征关税措施
  • 梅花奖在上海丨陈丽俐“婺剧折戏专场”:文戏武做,武戏文唱