当前位置:   article > 正文

Leetcode127 双向BFS_leetcode double bfs

leetcode double bfs

今天常规刷题,刷到一道搜索的题目,第一次用单向BFS过了,然后发现耗时是大佬们的10倍,看了下网上的题解,大概学习了一下双向BFS。

双向BFS的特点是,从起点和终点同时出发,交替搜索,如果在中间相遇了,意味着终点和起点之间存在路径。双向BFS一般情况下可以大大减少搜索范围(脑补一下正方形从左上和右下启动,均按圆弧状往外搜索,一旦两个圆弧相交,搜索结束,那么左下角和右上角有大量区域不需要搜索)。能用双向BFS也是有限制的,起点和终点的位置必须是已知的,不然没法从两头开始启动搜索,比如从起点出发去找目标所在位置,这种搜索没法用双向BFS解决。

在实现BFS时,大概思路是:

1,先用起点和终点建立两个长度为一的集合set1和set2

2,进入循环

3,选择长度最短的集合进行更新(这样尽可能让每次计算量最小),一般操作是if len(set1) > len(set2): set1, set2 = set2, set1,然后一直都是更新set1。建立一个set3,为空,遍历set1,如果元素的子元素的vis为False,加入到set3,vis置为True; 如果为True,且在set2中(也就是另一端已经搜索到了),停止搜索,返回相应结果;如果都不是,就跳过

4,set1 = set3

5,回到2

 

补充一句:双向BFS还可以当成DFS的预处理,比如有些题目需要用DFS去把可行的路径全输出,可以先用双向BFS去判断这个方向可不可行在进行DFS搜索,当然,可不可行的状态要记得存,减少双向BFS的重复计算。

 

Leetcode127 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换过程中,每次只能改变单词的一个字母,且要保证改变后单词在给定的字典中。

题解:

  1. import numpy as np
  2. import collections
  3. import heapq
  4. class Solution(object):
  5. def ladderLength(self, beginWord, endWord, wordList):
  6. """
  7. :type beginWord: str
  8. :type endWord: str
  9. :type wordList: List[str]
  10. :rtype: int
  11. """
  12. Map = {}
  13. flag = {}
  14. wordSet = set(wordList)
  15. if endWord not in wordSet:
  16. return 0
  17. for item in wordSet:
  18. flag[item] = False
  19. Queue_1 = set()
  20. Queue_1.add(beginWord)
  21. Queue_2 = set()
  22. Queue_2.add(endWord)
  23. flag[endWord] = True
  24. ans = 2
  25. while len(Queue_1) != 0:
  26. if len(Queue_1) > len(Queue_2):
  27. Queue_1, Queue_2 = Queue_2, Queue_1
  28. next = []
  29. for item in Queue_1:
  30. for i in range(len(item)):
  31. for j in range(26):
  32. if item[i] == chr(ord('a')+j):
  33. continue
  34. word = item[0:i] + chr(ord('a')+j) + item[i+1:]
  35. if word in wordSet:
  36. if flag[word] == False:
  37. next.append(word)
  38. flag[word] = True
  39. elif word in Queue_2:
  40. return ans
  41. Queue_1 = set(next)
  42. ans += 1
  43. return 0

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/718660?site
推荐阅读
相关标签
  

闽ICP备14008679号