BFS:队

  1. graph = {
  2. "A" : ["B","C"],
  3. "B" : ["A","C","D"],
  4. "C" : ["A","B","D","E"],
  5. "D" : ["B","C","E","F"],
  6. "E" : ["C","D"],
  7. "F" : ["D"]
  8. }
  9. def BFS(graph, s):
  10. queue = []
  11. queue.append(s) # 向list添加元素,用append()
  12. seen = set() # 此处为set, python里set用的是hash table, 搜索时比数组要快。
  13. seen.add(s) # 向set添加函数,用add()
  14. while (len(queue) > 0):
  15. vertex = queue.pop(0) #提取队头
  16. nodes = graph[vertex] #获得队头元素的邻接元素
  17. for w in nodes:
  18. if w not in seen:
  19. queue.append(w) #将没有遍历过的子节点入队
  20. seen.add(w) #标记好已遍历
  21. print("当前出队的是:",vertex)
  22.  
  23. BFS(graph, 'A')


DFS:栈

  1. graph = {
  2. "A" : ["B","C"],
  3. "B" : ["A","C","D"],
  4. "C" : ["A","B","D","E"],
  5. "D" : ["B","C","E","F"],
  6. "E" : ["C","D"],
  7. "F" : ["D"]
  8. }
  9. def DFS(graph, s):
  10. stack=[]
  11. stack.append(s) # 向list添加元素,用append()
  12. seen = set() # 此处为set, python里set用的是hash table, 搜索时比数组要快。
  13. seen.add(s) # 向set添加函数,用add()
  14. while (len(stack) > 0):
  15. vertex = stack.pop() # 弹出最后一个元素
  16. nodes = graph[vertex]
  17. for w in nodes:
  18. if w not in seen:
  19. stack.append(w)
  20. seen.add(w)
  21. print("当前出栈的是",vertex)
  22. DFS(graph, 'A')


BFS:求最短路

  1. def BFS2(graph, s):
  2. queue = []
  3. queue.append(s)
  4. seen = set()
  5. seen.add(s)
  6. parent = {s:None} #记录一下父子节点这样方便求最短路
  7. while (len(queue) > 0):
  8. vertex = queue.pop(0)
  9. nodes = graph[vertex]
  10. for w in nodes:
  11. if w not in seen:
  12. queue.append(w)
  13. seen.add(w)
  14. parent[w] = vertex
  15. print("当前出队的是:",vertex)
  16. return parent
  17.  
  18. parent = BFS2(graph, 'A')
  19. print("父子表:")
  20. for son in parent:
  21. print(parent[son],son)
  22. print('F->A的最短路:')
  23. start = 'F'
  24. while start:
  25. print(start,end='->')
  26. start= parent[start]
  27. print('EDN')


谢谢灯神的讲解,豁然开朗啊喂 :https://www.bilibili.com/video/av25763384/?spm_id_from=333.788.b_7265636f5f6c697374.2

Python实现BFS,DFS的更多相关文章

  1. POJ 2227 The Wedding Juicer (优先级队列+bfs+dfs)

    思路描述来自:http://hi.baidu.com/perfectcai_/item/701f2efa460cedcb0dd1c820也可以参考黑书P89的积水. 题意:Farmer John有一个 ...

  2. 邻结矩阵的建立和 BFS,DFS;;

    邻结矩阵比较简单,, 它的BFS,DFS, 两种遍历也比较简单,一个用队列, 一个用数组即可!!!但是邻接矩阵极其浪费空间,尤其是当它是一个稀疏矩阵的时候!!!-------------------- ...

  3. Collect More Jewels(hdu1044)(BFS+DFS)

    Collect More Jewels Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  4. Cleaning Robot (bfs+dfs)

    Cleaning Robot (bfs+dfs) Here, we want to solve path planning for a mobile robot cleaning a rectangu ...

  5. LeetCode:BFS/DFS

    BFS/DFS 在树专题和回溯算法中其实已经涉及到了BFS和DFS算法,这里单独提出再进一步学习一下 BFS 广度优先遍历 Breadth-First-Search 这部分的内容也主要是学习了labu ...

  6. 图的基本遍历算法的实现(BFS & DFS)复习

    #include <stdio.h> #define INF 32767 typedef struct MGraph{ ]; ][]; int ver_num, edge_num; }MG ...

  7. BFS/DFS算法介绍与实现(转)

    广度优先搜索(Breadth-First-Search)和深度优先搜索(Deep-First-Search)是搜索策略中最经常用到的两种方法,特别常用于图的搜索.其中有很多的算法都用到了这两种思想,比 ...

  8. NOIP2010引水入城[BFS DFS 贪心]

    题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度. ...

  9. HDU 1044 Collect More Jewels(BFS+DFS)

    Collect More Jewels Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

随机推荐

  1. Git错误总结

    1.error: failed to push some refs to ‘git@github.com:XXXX/XXXX‘ hint: Updates were rejected because ...

  2. Mac版-python环境配置(一):Python下载安装

    Mac OS X系统自带python,可以在终端输入python查看版本[输入exit()即可退出],如下: 从上图中可以看到,mac自带python 2.7.10,版本相对较低.现在python已升 ...

  3. poj1065Wooden Sticks(dp——最长递减数列)

    Description There is a pile of n wooden sticks. The length and weight of each stick are known in adv ...

  4. 应用安全-Web安全-漏洞修复方案整理

    通过HTTP头部字段防御措施整理 X-Frame-Options #反劫持 X-XSS-Protection #开启浏览器防XSS功能 Set X-Frame-Options  CSP X-Conte ...

  5. Python 学习笔记18 异常处理

    我们在编码的过程中,难免会遇到一些错误和异常, 这时候程序会异常退出,并且会抛出错误信息: 比如: print(1/0) ''' 输出: Traceback (most recent call las ...

  6. 命令行打包war包

    输入jar -cvf  包名.war  目录/*

  7. Codeforces 1162E Thanos Nim(博弈)

    一道有意思的博弈题.首先我们考虑一种必败情况,那就是有一方拿光了一堆石子,显然对方是必胜,此时对方可以全部拿走其中的n/2,那么轮到自己时就没有n/2堆,所以此时是必败态.我们先对所有石子堆sort, ...

  8. python——datetime模块

    一.datetime模块介绍 (一).datetime模块中包含如下类: 类名 功能说明 date 日期对象,常用的属性有year, month, day time 时间对象 datetime 日期时 ...

  9. DevExpress 控件中设置分隔符

    原文:DevExpress 控件中设置分隔符 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net ...

  10. 常见前端面试题JS部分

    1.闭包 2.JS操作和获取cookie //创建cookie function setCookie(name, value, expires, path, domain, secure) { var ...