BFS算法:利用队列进行搜索
DFS算法:利用栈进行搜索
1.BFS算法
##建立字典:表征该点的临接点
graph={
"A":["B","C"],
"B":["A","C","D"],
"C":["A","B","D","F"],
"D":["B","C","E","F"],
"E":["C","D"],
"F":["D"]
}
##BFS用队列解决搜索问题
def BFS(start_node):
queue=[]
queue.append(start_node)
seen=set()
seen.add(start_node)
while len(queue)>0:
now_node=queue.pop(0)
for node in graph[now_node]:
if node not in seen:
queue.append(node)
seen.add(node)
print(now_node)
2.DFS算法
##DFS 用栈解决搜索问题
def DFS(start_node):
stack=[]
stack.append(start_node)
seen=set()
seen.add(start_node)
while len(stack)>0:
now_node=stack.pop()
for node in graph[now_node]:
if node not in seen:
stack.append(node)
seen.add(node)
print(now_node)
#DFS("A")
3.最短路径
##求最短路径
def BFS(start_node):
queue=[]
queue.append(start_node)
seen=set()
seen.add(start_node)
parent={start_node:None}
while len(queue)>0:
now_node=queue.pop(0)
for node in graph[now_node]:
if node not in seen:
queue.append(node)
parent[node]=now_node
seen.add(node)
#print(now_node)
print(parent)
全部代码:
##建立字典:表征该点的临接点
graph={
"A":["B","C"],
"B":["A","C","D"],
"C":["A","B","D","F"],
"D":["B","C","E","F"],
"E":["C","D"],
"F":["D"]
}
##BFS用队列解决搜索问题
def BFS(start_node):
queue=[]
queue.append(start_node)
seen=set()
seen.add(start_node)
while len(queue)>0:
now_node=queue.pop(0)
for node in graph[now_node]:
if node not in seen:
queue.append(node)
seen.add(node)
print(now_node)
#BFS("A")
##DFS 用栈解决搜索问题
def DFS(start_node):
stack=[]
stack.append(start_node)
seen=set()
seen.add(start_node)
while len(stack)>0:
now_node=stack.pop()
for node in graph[now_node]:
if node not in seen:
stack.append(node)
seen.add(node)
print(now_node)
#DFS("A")
##求最短路径
def BFS(start_node):
queue=[]
queue.append(start_node)
seen=set()
seen.add(start_node)
parent={start_node:None}##存储路径
while len(queue)>0:
now_node=queue.pop(0)
for node in graph[now_node]:
if node not in seen:
queue.append(node)
parent[node]=now_node
seen.add(node)
#print(now_node)
print(parent)
##搜索A--E的路径
v='E'
while v!=None:
print(v)
v=parent[v]
BFS("A")