2019-06-01:邻接表法构造图

将要构造的图

#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)

猜你喜欢

转载自blog.csdn.net/sinat_18722099/article/details/90727260