
writer:lIcht email:lIcht.gzl@gmail.com Date: 2019.9.18
图是一种数学结构,数学里有分枝“图论”,研究这种拓扑结构。数据结构把图看成一类复杂数据结构,用于表示各种具有复杂关系的数据集合。图在实际应用中很广泛,有很多的实现方式,和许多的典型算法。在在这里使用Python语言进行部分功能的实现:
xxxxxxxxxx# 图的操作class Graph(object): """图结构类""" def __init__(self): self.graph = {} self.queue = [] self.flag = 0 self.long = 0 def add_v(self, item): # 图中添加顶点,索引0记录每一个key的父顶点 self.graph[item] = [] def add_e(self, a, b): # 添加一条a指向b的路径 self.graph[a].append(b) def parents(self, item): # 遍历一个顶点的所有父顶点 parent = [] for i in self.graph: for j in self.graph[i]: if j == item: parent.append(i) return parent def child(self, item): # 遍历所有子顶点 return self.graph[item] def is_exist(self, a, b, queue=[]): # 判断a指向b是否存在通路,广度遍历 if len(queue) == self.long: if queue == []: queue.append(a) else: self.long = 0 self.flag = 0 return False for n in queue: if n == b: # self.long = 0 self.flag = 0 return True self.long = len(queue) for i in self.graph[a]: if i not in queue: queue.append(i) if len(queue) > self.long: self.flag += 1 # queue元素扩充后,flag才+1 print(queue) return self.is_exist(queue[self.flag], b, queue)if __name__ == "__main__": g = Graph() g.add_v("A") g.add_v("B") g.add_v("C") g.add_v("D") g.add_e("A", "D") g.add_e("D", "C") g.add_e("B", "D") g.add_e("C", "A") print(g.parents("A")) print(g.parents("D")) print(g.parents("C")) print(g.child("A")) print(g.child("B")) print(g.child("D")) print(g.flag) print(g.long) print(g.is_exist("A", "B")) print(g.flag) print(g.long)