python算法与数据结构(22)图

有向图和无向图。
把图变成代码,可以使用邻接矩阵。
BFS:breadth first search ,广度优先搜索
DFS:depdth first search, 深度优先搜索

"""构造图"""
from collections import deque

GRAPH = {
    "A": ["B", "F"],
    "B": ["C", "I", "G"],
    "C": ["B", "I", "D"],
    "D": ["C", "I", "G", "H", "E"],
    "E": ["D", "H", "F"],
    "F": ["A", "G", "E"],
    "G": ["B", "F", "H", "D"],
    "H": ["G", "D", "E"],
    "I": ["B", "C", "D"],
}


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

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

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

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

# 广度优先搜索
def bfs(graph, start):
    search_queue = Queue()
    search_queue.push(start)
    searched = set()  # 访问过的节点
    while search_queue:
        cur_node = search_queue.pop()
        if cur_node not in searched:  # 没有被访问过的节点
            print(cur_node)
            # yield cur_node
            searched.add(cur_node)
            for node in graph[cur_node]:
                search_queue.push(node)


print("bfs:")
bfs(GRAPH, "A")

输出结果:

bfs:
A
B
F
C
I
G
E
D
H

在这里插入图片描述
ABFCIGEDH从近到远的输出

# 深度优先
DFS_SEARCHED = set()


def dfs(graph, start):
    if start not in DFS_SEARCHED:
        print(start)
        DFS_SEARCHED.add(start)
    for node in graph[start]:
        if node not in DFS_SEARCHED:
            dfs(graph, node)


print("dfs:")
dfs(GRAPH, "A")

结果:

dfs:
A
B
C
I
D
G
F
E
H
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值