图论的一个入门级算法,其算法思想是:使相邻节点染色不同,常用的使用场景是地图染色等等。
现考虑如下一个拓扑结构,该图使用字典进行存储:
graph={'A':['B','D','C','F'],
'B':['A','D','C','G'],
'C':['A','B','E','F','D'],
'D':['A','B','C'],
'E':['C','F','G'],
'F':['C','E','A'],
'G':['B','E','H'],
'H':['G']}
直观的图结构应该是这样子:
(这个图好丑的说。。。)
主要代码如下:
def color(graph,start,MAX=99):
vlist=[]#保存当前节点
vlist.append(start)
colored={} #保存已着色节点
colored[start]=0
while len(vlist):
index=vlist.pop()
for node in graph[index]:
if node not in colored:
print('正在为节点',node,'着色...')
adjcs=graph[node]
used=[]
for adjc in adjcs:
if adjc in colored:#not empty
used.append(colored[adjc])
#choose an minim id not used by neighbors
for i in range(MAX):
if i not in used:
colored[node]=i
print('为该节点着色',i)
break
vlist.append(node)
print(colored)
运行结果: