Leetcode 图
文章平均质量分 76
leetcode中与图和拓扑排序有关的题目
努利!奋斗!
这个作者很懒,什么都没留下…
展开
-
Leetcode 115. Find All Possible Recipes from Given Supplies
leetcode原创 2022-07-01 09:17:48 · 121 阅读 · 0 评论 -
Leetcode 1786. Number of Restricted Paths From First to Last Node
题目解析题目意思首先理解一下。就是说第一个节点和最后一个节点是1和n固定,返回符合要求的restricted path个数。这个restricted含义是,在path中离最后一个节点也就是n越远的节点,距离也必须越大。这里需要注意的是除了开始节点和结束节点固定之外,并没有要求path中的节点本身的数字必须要有顺序,只需要离最后一个节点的距离保持满足条件即可。所以解题分为两步:通过最短路径算法找到每个节点离最后一个节点的最短距离,这里采用dijkstra找出符合条件的节点到最后节点距离降序的路径个原创 2022-02-16 10:57:11 · 205 阅读 · 0 评论 -
leetcode 2087. Minimum Cost Homecoming of a Robot in a Grid
题目解法解法1:最短路径问题(TLE)bellman fordclass Solution: def minCost(self, startPos: List[int], homePos: List[int], rowCosts: List[int], colCosts: List[int]) -> int: m,n = len(rowCosts),len(colCosts) dists = [[float('inf')] * n for _ in r原创 2022-01-04 12:27:52 · 566 阅读 · 0 评论 -
Leetcode 1376. Time Needed to Inform All Employees (python+cpp)
题目解法1:BFSclass Solution: def numOfMinutes(self, n: int, headID: int, manager: List[int], informTime: List[int]) -> int: graph = collections.defaultdict(list) # s:subordinates,m:direct manager for s,m in enumerate(manager):原创 2020-12-27 07:06:30 · 1148 阅读 · 0 评论 -
Leetcode 1443. Minimum Time to Collect All Apples in a Tree (python)
题目解法1:利用dfs,找出所有的在摘苹果的过程中会被访问的边。这些被访问的边数*2就是答案这种做法需要保存当前路径,当发现当前路径包含苹果时,将这些边加入访问列表。这样做的坏处在于,每条边可能被加入多次,意味着时间复杂度的增加,事实证明这种做法确实不都快,刚刚过TLE的线。但利用字典或者set,还是可以不重复的记录摘苹果时需要被访问的边class Solution: def minTime(self, n: int, edges: List[List[int]], hasApple: L原创 2020-11-22 10:51:11 · 376 阅读 · 0 评论 -
Leetcode 1514. Path with Maximum Probability (python)
题目解法:bellman ford这个题目本质上还是个图中求最短路径的问题参考leetcode Path With Minimum Effort解法class Solution: def maxProbability(self, n: int, edges: List[List[int]], succProb: List[float], start: int, end: int) -> float: graph = collections.defaultdict(li原创 2020-11-06 10:51:40 · 449 阅读 · 0 评论 -
Leetcode 1615. Maximal Network Rank (python)
Leetcode 1615. Maximal Network Rank题目暴力解法:邻接矩阵预存边题目暴力解法:class Solution: def maximalNetworkRank(self, n: int, roads: List[List[int]]) -> int: graph = collections.defaultdict(int) for road in roads: graph[road[原创 2020-10-21 13:54:44 · 541 阅读 · 0 评论 -
Leetcode 1584. Min Cost to Connect All Points (python)
Leetcode 1584. Min Cost to Connect All Points题目错误解法:解法:Minimum spanning tree题目错误解法:最开始以为通过判断加入的边的数量和被访问过的点的数量可以判断是不是符合条件了,其实这样是不成立的,可以举出很多反例class Solution(object): def minCostConnectPoints(self, points): """ :type points: List[Lis原创 2020-10-18 08:09:50 · 967 阅读 · 0 评论 -
Leetcode 863. All Nodes Distance K in Binary Tree (python)
Leetcode 863. All Nodes Distance K in Binary Tree题目解析:题目解析:这道题看到固定距离寻找这种限制条件,第一个想到的就应该是BFS。所以这道题目变成了两个部分:将树转化为图,每个节点指向parent节点和左右子节点从target节点出发,BFS寻找特定距离的点值得注意的是,这边给的target是节点,所以不需要额外去寻找target节点这边将树转化为图有两种做法,一种是利用树的性质,将parent直接作为树节点的属性,代码如下:cla原创 2020-10-15 10:27:49 · 320 阅读 · 0 评论 -
Leetcode 773. Sliding Puzzle (python+cpp)
题目解法:BFS把board的状态看成是图的节点,相互之间的转换看成是边,那么其实这个就是找节点之间最短距离的问题,套BFS的模板就可以。需要注意的几个点:因为list是unhashable的,所以不能加到visited的set中,所以这边牵涉到list跟字符串之间的一些转换list中某个元素在摊平了之后的string中的位置对应关系。假设list中的位置是[x,y],对应string中的位置是x*num_col+y.反过来如果在string中的位置是k,那么在list中对应位置是[k//nu原创 2020-09-25 14:49:14 · 534 阅读 · 0 评论 -
Leetcode 207. Course Schedule (python+cpp)
Leetcode 207. Course Schedule题目解法:拓扑排序题目解法:拓扑排序这道题目是很经典的拓扑排序,用BFS和DFS都可以实现,就跟Leetcode 785一样,BFS解法和DFS解法只差储存数据是用队列还是栈。具体解法如下:建立一个邻接矩阵表示图,在建立邻接矩阵的时候注意指向,必须是前修课程指向后修课程同时将所有入度为0的点加入队列或者栈进行搜索,将入度为0的点的相邻节点入度全部减1,如果出现了新的节点,那么将新节点加入队列和栈搜索结束后,如果图中所有节点都入度为0原创 2020-07-09 11:46:54 · 370 阅读 · 0 评论 -
Leetcode 785. Is Graph Bipartite? (python+cpp)
Leetcode 785. Is Graph Bipartite?题目解法: BFS或DFS+染色题目解法: BFS或DFS+染色对于二分图的判断是用经典的染色法。 染色的方式是,看能否用两种颜色将所有节点涂上颜色,并且保证相邻节点都是不一样的颜色。如果可以做到,那么说明图是可以二分的。这道题目用BFS或者DFS都是可以的,换句话说用队列或者堆栈都可以。如果是BFS,那么在当前节点涂完色时候,你会把他相邻的节点都涂成另一种颜色。如果是DFS的话,当前节点涂完之后,你会把最近的相邻节点涂成另一种颜色原创 2020-07-09 10:12:58 · 1081 阅读 · 0 评论