首页 > 其他 > 详细

图数据结构_广度优先搜索

时间:2020-10-28 21:09:36      阅读:36      评论:0      收藏:0      [点我收藏+]

图数据结构有两种经典的遍历方式: 广度优先搜索和深度优先搜索

这里以广度优先搜索为例

技术分享图片

class Person:
    def __init__(self, name):
        self.name = name
        self.friends = []
        self.visited = False

    def add_friend(self, friend):
        self.friends.append(friend)

    def display_network(self):
        # 记下每个访问过的人, 以便算法完结后能重置他们的visited属性为false
        to_reset = [self]
        # 创建一个开始就含有根顶点的队列
        queue = [self]
        self.visited = True

        while len(queue):
            # 设出队的顶点为当前顶点
            current_vertex = queue.pop(0)
            print(current_vertex.name, end= )
            # 将当前顶点的所有未访问的邻接点加入队列
            for friend in current_vertex.friends:
                if not friend.visited:
                    to_reset.append(friend)
                    queue.append(friend)
                    friend.visited = True
            # 算法完结时,将访问过的结点的visited属性重置为false
        for node in to_reset:
            node.visited = False

if __name__ == __main__:
    # 起步定点
    alice = Person(Alice)
    # 一度联系人
    bob = Person(Bob)
    candy = Person(Candy)
    derek = Person(Derek)
    elaine = Person(Elaine)
    # 二度联系人
    fred = Person(Fred)
    gina = Person(Gina)
    # 三度联系人
    helen = Person(Helen)
    irena = Person(Irena)

    alice.add_friend(bob)
    alice.add_friend(candy)
    alice.add_friend(derek)
    alice.add_friend(elaine)
    bob.add_friend(alice)
    bob.add_friend(fred)
    candy.add_friend(alice)
    derek.add_friend(alice)
    derek.add_friend(gina)
    elaine.add_friend(alice)
    fred.add_friend(bob)
    fred.add_friend(helen)
    gina.add_friend(derek)
    gina.add_friend(irena)
    helen.add_friend(fred)
    irena.add_friend(gina)

    alice.display_network()

# 打印结果:Alice Bob Candy Derek Elaine Fred Gina Helen Irena 

 

图数据结构_广度优先搜索

原文:https://www.cnblogs.com/glz666/p/13893386.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!