转载:https://blog.csdn.net/Harrytsz/article/details/84204109
树的格式
graph={
'A':['B','C'],
'B':['A','C','D'],
'C':['A','D','E'],
'D':['B','C','E','F'],
'E':['C','D'],
'F':['D']
}
广度搜索优先BFS其实就是利用队列的特点,先进先出
def bfs(graph,s):
verx=[]
nodes=[]
seen=set(s)
parent={s:None}
queue=[s]
while(len(queue)>0):
q=queue.pop(0)//队列
verx.append(q)
nodes=graph[q]
for i in nodes:
if i not in seen:
seen.add(i)
queue.append(i)
parent[i]=q
print(verx)
return parent
if __name__ == '__main__':
parent=bfs(graph,"E")
print(parent)
v='B'
while v!=None:
print(v)
v=parent[v]
深度搜索优先DFS其实就是利用栈的特点,先进后出
def bfs(graph,s):
verx=[]
nodes=[]
seen=set(s)//设置是否访问过
parent={s:None}//父节点,以便输出路径
stack=[s]
while(len(stack)>0):
q=stack.pop()//栈
verx.append(q)
nodes=graph[q]
for i in nodes:
if i not in seen:
seen.add(i)
stack.append(i)
parent[i]=q
print(verx)
return parent
if __name__ == '__main__':
parent=bfs(graph,"E")
print(parent)
v='B'
while v!=None:
print(v)
v=parent[v]