码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode1306

时间:2019-12-29 13:02:11      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:div   pre   元素   als   算法思路   循环   etc   ted   过滤   

 1 class Solution:
 2     def bfs(self,arr,n,start,visited,path):
 3         while len(path) > 0:
 4             temp = []
 5             while len(path) > 0:
 6                 idx = path.pop()
 7                 for i in range(n):
 8                     if visited[i] == 1 or i == idx:
 9                         continue
10                     else:
11                         if i < idx and arr[i] == idx - i:
12                             if i == start:
13                                 return True
14                             visited[i] = 1
15                             temp.append(i)
16                         elif i > idx and arr[i] == i - idx:
17                             if i == start:
18                                 return True
19                             visited[i] = 1
20                             temp.append(i)
21             path = temp[:]
22         return False
23 
24 
25     def canReach(self, arr: List[int], start: int) -> bool:
26         if arr[start] == 0:
27             return True
28         path = []#记录0的下标
29         n = len(arr)
30         visited = [0] * n
31         for i in range(n):
32             if arr[i] == 0:
33                 path.append(i)
34         return self.bfs(arr,n,start,visited,path)

算法思路:BFS。

先记录所有的0值元素的下标,作为初始集合。使用两层遍历,找出每到每个可达点存入下一层的集合。

使用visited进行缓存,过滤重复访问过的点,防止出现环,而死循环。

leetcode1306

标签:div   pre   元素   als   算法思路   循环   etc   ted   过滤   

原文地址:https://www.cnblogs.com/asenyang/p/12114472.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!