图的广度优先搜索算法GFS
为了记录搜索的轨迹,广度优先搜索将每个顶点都找色为白色、灰色和黑色。算法开始时,所有的顶点都是白色的。伴随着搜索的进行,各顶点会逐渐变成灰色,然后成为黑色。与黑色顶点相邻的所有定点都是已经被发现的。灰色顶点可能会有一些白色的相邻顶点,他们代表了已发现与未发现顶点之间的边界。
对于每一个顶点u,其色彩存储于变量color[u]中,u的父母存于变量pai[u]中。
具体代码如下所示(python实现)
def GFS(G, s):
print s
color = {}
d = {}
pai = {}
V = G.keys()
V.remove(s)
for u in V:
color[u] = 'WHITE'
d[u] = '∞'
pai[u] = 'NIL'
d[s] = 0
pai[s] = 'NIL'
Q = []
Q.append(s)
while Q != []:
u = Q.pop();
for v in G[u]:
if color[v] == 'WHITE':
color[v] = 'GRAY'
print v
d[v] = d[u] + 1
pai[v] = u
Q.append(v)
color[u] = 'BLACK'
G ={'A':['B','C'], 'B':['D'], 'C':['E'], 'D':['C','E'], 'E':[]}
GFS(G,'A')
本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名小橋流水(包含链接)。如您有任何疑问或者授权方面的协商,请给我发邮件。