[算法导论]BFS @ Python

复制代码
class Graph:
    def __init__(self):
        self.V = []

class Vertex:
    def __init__(self, x):
        self.key = x
        self.color = 'white'
        self.d = 10000
        self.pi = None
        self.adj = []

class Solution:
    def BFS(self, G, s):
        for u in G.V:
            if u != s:
                u.color = 'white'
                u.d = 10000
                u.pi = None
        s.color = 'gray'
        s.d = 0
        s.pi = None
        Q = []
        Q.append(s)
        while Q != []:
            u = Q.pop(0)
            for v in u.adj:
                if v.color == 'white':
                    v.color = 'gray'
                    v.d = u.d + 1
                    v.pi = u
                    Q.append(v)
            u.color = 'black'

if __name__ == '__main__':
    G = Graph()
    r = Vertex('r')
    s = Vertex('s')
    t = Vertex('t')
    u = Vertex('u')
    v = Vertex('v')
    w = Vertex('w')
    x = Vertex('x')
    y = Vertex('y')
    r.adj = [s, v]
    s.adj = [r, w]
    t.adj = [u, w, x]
    u.adj = [t, x, y]
    v.adj = [r]
    w.adj = [s, t, x]
    x.adj = [t, u, w, y]
    y.adj = [u, x]
    G.V = [r, s, t, u, v, w, x, y]
    m = Solution()
    m.BFS(G, s)
    for v in G.V:
        if v != s:
            print v.key, v.color, v.d, v.pi.key
复制代码

 

posted @   南郭子綦  阅读(714)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示