2021-07-01

有向图的介绍和实现

定义:
有向图(Digraph或Directed graph)是一副由一系列顶点和连接顶点之间的具有方向性的边组成的图
有向图的术语:
出度:由某个顶点指出的边的个数称为该顶点的出度。
入度:指向某个顶点的边的个数称为该顶点的入度。
有向路径:由一系列顶点组成,对于其中的每个顶点都存在一条有向边,从它指向序列中的下一个顶点。
有向环:至少含有一条边,且起点和终点相同的有向路径。
有向图的实现:
构造方法__init__()中的属性
num_vertices和num_edges分别代表要构造的图的顶点和边的数量;adj_list是一个列表,其索引代表顶点,储存的值是与索引对应顶点相邻的全部顶点
point_edge(x, y) 对传入的两个顶点x,y构造一条边:x→y
point_to_vertices(x) 获取传入的顶点x所有指出的顶点
reverse_digraph() 将当前图中的所有边的方向反转获得一张反转图并返回
class Digraph:
def init(self, num):
self.num_vertices = num
self.num_edges = 0
self.adj_list = [[] for _ in range(num)]

def count_vertices(self):
    return self.num_vertices

def count_edges(self):
    return self.num_edges

def point_edge(self, x, y):
    """Add an edge of vertex x: x --> y"""
    self.adj_list[x].append(y)

def point_to_vertices(self, x):
    return self.adj_list[x]

def reverse_digraph(self):
    rvs_digraph = Digraph(self.num_vertices)
    for index, queue in enumerate(self.adj_list):
        for v in queue:
            rvs_digraph.point_edge(v, index)
    return rvs_digraph

if name == ‘main’:
graph = Digraph(5)

graph.point_edge(3, 0)
graph.point_edge(0, 2)
graph.point_edge(2, 0)
graph.point_edge(2, 1)
graph.point_edge(1, 0)
graph.point_edge(1, 4)

print(graph.point_to_vertices(1))
print(graph.adj_list)

rvs_graph = graph.reverse_digraph()
print(rvs_graph.adj_list)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值