1. 程式人生 > 程式設計 >基於python模擬bfs和dfs程式碼例項

基於python模擬bfs和dfs程式碼例項

BFS

"""
# @Time  : 2020/11/8
# @Author : Jimou Chen
"""


# 廣搜
def bfs(graph,start):
  queue = [start] # 先把起點入佇列
  visited = set() # 訪問國的點加入
  visited.add(start)

  while len(queue):
    vertex = queue.pop(0)
    # 找到佇列首元素的連線點
    for v in graph[vertex]:
      if v not in visited:
        queue.append(v)
        visited.add(v)
    # 列印彈出佇列的該頭元素
    print(vertex,end=' ')


if __name__ == '__main__':
  graph = {
    'A': ['B','D','I'],'B': ['A','F'],'C': ['D','E','D': ['A','C','E': ['C','H'],'F': ['B','G': ['C','H': ['E','F','G'],'I': ['A','C']
  }

  bfs(graph,'A')

A B D I F C H E G
Process finished with exit code 0

DFS

"""
# @Time  : 2020/11/8
# @Author : Jimou Chen
"""


# 深搜
def dfs(graph,start):
  stack = [start]
  visited = set()
  visited.add(start)

  while len(stack):
    vertex = stack.pop() # 找到棧頂元素
    for v in graph[vertex]:
      if v not in visited:
        stack.append(v)
        visited.add(v)

    print(vertex,'C']
  }

  dfs(graph,'E')

E H G F B A I D C
Process finished with exit code 0

總結

很明顯一個用了佇列,一個用了棧

利用python語言優勢,只需改動pop即可

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。