基于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’, ’I’], ’D’: [’A’, ’C’, ’F’], ’E’: [’C’, ’H’], ’F’: [’B’, ’H’], ’G’: [’C’, ’H’], ’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, end=’ ’)if __name__ == ’__main__’: graph = { ’A’: [’B’, ’D’, ’I’], ’B’: [’A’, ’F’], ’C’: [’D’, ’E’, ’I’], ’D’: [’A’, ’C’, ’F’], ’E’: [’C’, ’H’], ’F’: [’B’, ’H’], ’G’: [’C’, ’H’], ’H’: [’E’, ’F’, ’G’], ’I’: [’A’, ’C’] } dfs(graph, ’E’)
E H G F B A I D C Process finished with exit code 0
總結(jié)
很明顯一個用了隊列,一個用了棧
利用python語言優(yōu)勢,只需改動pop即可
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. CentOS郵件服務器搭建系列—— POP / IMAP 服務器的構(gòu)建( Dovecot )2. 在JSP中使用formatNumber控制要顯示的小數(shù)位數(shù)方法3. MyBatis JdbcType 與Oracle、MySql數(shù)據(jù)類型對應關(guān)系說明4. jsp網(wǎng)頁實現(xiàn)貪吃蛇小游戲5. django創(chuàng)建css文件夾的具體方法6. 利用CSS制作3D動畫7. ASP中if語句、select 、while循環(huán)的使用方法8. .NET SkiaSharp 生成二維碼驗證碼及指定區(qū)域截取方法實現(xiàn)9. 存儲于xml中需要的HTML轉(zhuǎn)義代碼10. ASP中實現(xiàn)字符部位類似.NET里String對象的PadLeft和PadRight函數(shù)
