将要构造的图
#encoding=utf-8
class Graph(object):
def __init__(self):
# 存储一个节点可到达的所有节点
# key就是某一个节点,value可以连接到的其他节点
self.nodeNeighbors = {}
# 存储所有被访问的节点,value为True表示被访问过了
# key就是某一个节点,value存储True
self.visited = {}
# 添加节点,每个Node对象就是一个int的数字对象
def addNode(self, node):
if node not in self.nodeNeighbors:
self.nodeNeighbors[node] = []
# 批量添加节点
def addNodes(self, nodeList):
for node in nodeList:
self.addNode(node)
# 添加有权边
def addEdge(self, edge, var=1):
# edge是一个元组,两个值u,v,某节点u,u连接的某个一个节点v
u, v = edge # 把u和v从元组中取出来
if u == v: # 两个节点是同一个节点,容错的处理
return None # 出现此情况,啥也不干
# self.nodeNeighbors[u]的值为一个元组(v,value)
# v 和 value 就是节点值和权重
# 当节点值不存在的时候才会进行添加
# [x[0] for x in self.nodeNeighbors[u]]
# 把所有当前连接u的其他节点取出来
if v not in [x[0] for x in self.nodeNeighbors[u]]:
self.nodeNeighbors[u].append((v, var))
return 1
else:
return 0
# 返回所有节点
def nodes(self):
return self.nodeNeighbors.keys()
if __name__ == '__main__':
graph = Graph()
nodeList = [1, 2, 3, 4, 5]
graph.addNodes(nodeList)
graph.addEdge((1, 2))
graph.addEdge((1, 3))
graph.addEdge((3, 4))
graph.addEdge((1, 5))
print(graph.nodeNeighbors)