NOTE
搬运文章,原创作者:http://joshuablog.herokuapp.com/
Just for study purpose, I don’t hold the copyright, if this is affecting anyone, please let me know.
DFS
Matrix
介绍
对于不是Tree下面的DFS题来说,一直是我的一个弱点(不知道为什么),所以现在特意开贴来总结常见的题型
大致的模版就是明确dfs函数中不合法的状态要直接return和继续dfs的情况;同时也要做好visited的标记,从而避免无限循环的错误
1 | def dfs(i,j,matrix): |
733. Flood Fill
最简单的DFS版本
1 | class Solution(object): |
130. Surrounded Regions
如果1的周围有边界的话,设置为M作为标准,之后再改回来。之后的same as Island
1 | class Solution(object): |
200. Number of Islands
如果岛屿周围为1,置为0
1 | class Solution(object): |
542 01 Matrix
Same as Wall and Gate
1 | class Solution(object): |
286 Walls and Gates
找出0的位置,然后-1为墙
1 | class Solution(object): |
Matrix 2
有时候在Matrix的时候需要判断每一次DFS的情况,这时候也可以通过比较每一次更新的值来抉择
329. Longest Increasing Path in a Matrix
每一次找到递增的时候,继续DFS,然后用cache来记录每一个(i,j)最大可能的递增长度
1 | class Solution(object): |
695. Max Area of Island
另外一种思路
1 | class Solution: |
417. Pacific Atlantic Water Flow
这道题要从两方面来判断,太平洋和大西洋
1 | class Solution(object): |
BFS
普通的
参见之前写过的BFS-border总结
BFS-Maze总结
490
499
505
542
286
狄杰斯特拉算法
求有缘路径的最短距离
算法导论的经典例子
743. Network Delay Time
使用heap操作,每次添加最短的路径cost
1 | import heapq |
787. Cheapest Flights Within K Stops
几乎和上题一样
1 | class Solution(object): |