数据结构与算法 Python实现 图

本文深入探讨了图数据结构中的两种基本搜索算法:宽度优先搜索(BFS)和深度优先搜索(DFS)。通过具体实例,详细解释了如何使用队列和递归实现这两种算法,以及它们在解决实际问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个关系图,互相连接,通过邻居查找,浪费空间

from collections import deque


class Queue(object):
    def __init__(self):
        self._itme_linked_list = deque()

    def __len__(self):
        return len(self._itme_linked_list)

    def push(self,value):
        return self._itme_linked_list.append(value)

    def pop(self):
        return self._itme_linked_list.popleft()

def bfs(graph,start):
    #新建一个消息队列
    search_queue = Queue()
    #先添添加一个节点
    search_queue.push(start)
    #创建一个set
    searched = set()
    #循环队列
    while search_queue:
        #取出值
        cur_node = search_queue.pop()
        #这个节点不在set中就添加进去
        if cur_node not in searched:
            searched.add(cur_node)
            #循环图里的节点
            for node in graph[cur_node]:
                #添加节点
                search_queue.push(node)

DFS_SEARCHED = set()

def dfs(graph,start):
    #这节点不在set中,就添加进去
    if start not in DFS_SEARCHED:
        DFS_SEARCHED.add(start)
    #循环图,取出相邻的点
    for node in graph[start]:
        #节点不在set中,就重新递归调用
        if node not in DFS_SEARCHED:
            dfs(graph,node)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值