【BFS】【DFS】【最短路徑】
阿新 • • 發佈:2018-12-10
def BFS(garph,s):
'''
:param garph:圖
:param s: 開始的節點
:return:
'''
queue =[]#存放所有的順序
queue.append(s)
seen=set()
seen.add(s)
while (len(queue)>0):
vertex =queue.pop(0)
nodes = graph[vertex]
for w in nodes:
if w not in seen:
queue.append(w)
seen.add(w)
print(vertex)
def DFS(garph,s):
'''
:param garph:圖
:param s: 開始的節點
:return:
'''
queue =[]#存放所有的順序
queue.append(s)
seen=set()
seen.add(s)
while (len(queue)>0):
vertex =queue.pop()
nodes = graph[vertex]
for w in nodes:
if w not in seen:
queue.append(w)
seen.add(w)
print(vertex)
def findleastroad(graph,s):
'''
:param garph:圖
:param s: 開始的節點
:return:
'''
queue = [] # 存放所有的順序
queue.append(s)
seen = set()
seen.add(s)
parent={s:None}#s的前一個點是空
while (len(queue) > 0):
vertex = queue.pop(0)
nodes = graph[vertex]
for w in nodes:
if w not in seen:
queue.append(w)
seen.add(w)
parent[w]=vertex
#print(vertex)
return parent
if __name__=='__main__':
graph = {
# 通過一個點找到所有的相鄰點
"A": ['B', 'C'],
"B": ['A', 'C', 'D'],
"C": ['A', 'B', 'D', 'E'],
"D": ['B', 'C', 'E', 'F'],
"E": ['C','D'],
'F': ['D']
}
print('BFS結果:')
BFS(graph,'A')
print('DFS結果:')
DFS(graph,'A')
print('最短路徑')
parent=findleastroad(graph,'E')
for key in parent:
print(key,parent[key])#打印出每一個節點的前一個點
v='B'
while v!=None:
print(v)
v=parent[v]