Python 数据结构与算法——图出度和入度的计算

Trick(七)——list of lists 行和、列和的计算

如果以邻接矩阵(元素为0/1(true/false))的形式表示图结构,则各个顶点的出度:各行的行和,各个顶点的入度:各列的列和。

考虑如下的图结构:



使用邻接集的字典表示法对该图结构做如下表示:

G = {
    'a':set('bcdef'),
    'b':set('ce'),
    'c':set('d'),
    'd':set('e'),
    'e':set('f'),
    'f':set('cgh'),
    'g':set('fh'),
    'h':set('fh')
}

每一个顶点的出度,只需计算每一个顶点对应的集合的大小即可;
每一个顶点的入度,我们要统计其在右侧的集合中出现的次数。

out_degrees = dict((u, 0) for u in G)
in_degrees = dict((u, 0) for u in G)

for u in G:
    out_degrees[u] = len(G[u])

for u in G:
    for v in G[u]:
        in_degrees[v] += 1

结果:

{'c': 1, 'f': 3, 'h': 2, 'b': 2, 'a': 5, 'e': 1, 'd': 1, 'g': 2}
{'c': 3, 'f': 4, 'h': 3, 'b': 1, 'a': 0, 'e': 3, 'd': 2, 'g': 1}
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用领接表的创建法,可以通过计算每个顶点的出度入度来求顶点的度,具体实现如下: 1. 创建一个大小为n的数组degree,用来存储每个顶点的度数,初始值全部为0。 2. 遍历领接表中的每个顶点,对于每个顶点v,遍历其邻接点列表,将degree[v]加1,表示v的出度入度增加了1。 3. 如果要求入度,则在遍历邻接点列表时,将度数加到邻接点的degree数组中;如果要求出度,则将度数加到当前顶点的degree数组中。 4. 遍历完所有顶点后,degree数组中每个元素的值即为对应顶点的度数。 下面是基于领接表的Python代码实现,其中adj_list是领接表,n是顶点数,in_degrees表示入度,out_degrees表示出度: ```python n = len(adj_list) # 的顶点数 in_degrees = [0] * n # 初始化每个顶点的入度为0 out_degrees = [0] * n # 初始化每个顶点的出度为0 # 计算每个顶点的出度入度 for v in range(n): # 计算顶点v的出度 out_degrees[v] = len(adj_list[v]) # 计算顶点v的入度 for u in adj_list[v]: in_degrees[u] += 1 ``` 在上述代码中,adj_list是领接表,n是的顶点数。在第4行和第7行中,我们用0初始化了每个顶点的出度入度。在第10行和第13行中,我们遍历领接表中的每个顶点,并分别计算出度入度。对于出度,我们可以直接使用邻接表中存储的邻接点列表的长度;对于入度,我们需要遍历每个顶点的邻接点列表,将每个邻接点的入度加1。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

五道口纳什

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

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

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

打赏作者

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

抵扣说明:

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

余额充值