leetcode1391

Posted AsenYang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode1391相关的知识,希望对你有一定的参考价值。

 1 class Solution:
 2     def dfs(self,grid,visited,x,y,m,n):
 3         if x < 0 or x >= m or y < 0 or y >= n or visited[x][y] == 1:
 4             return False
 5         if x == m - 1 and y == n - 1:
 6             return True
 7         visited[x][y] = 1
 8         if grid[x][y] == 1:
 9             r1,r2 = False,False
10             if y + 1 <= n - 1 and grid[x][y+1] != 2:#
11                 r1 = self.dfs(grid,visited,x,y+1,m,n)
12             if y - 1 >= 0 and grid[x][y-1] != 2:#
13                 r2 = self.dfs(grid,visited,x,y-1,m,n)
14             return r1 or r2
15         elif grid[x][y] == 2:
16             r1,r2 = False,False
17             if x + 1 <= m -1 and grid[x+1][y] != 1:#
18                 r1 = self.dfs(grid,visited,x+1,y,m,n)
19             if x - 1 >= 0 and grid[x-1][y] != 1:#
20                 r2 = self.dfs(grid,visited,x-1,y,m,n)
21             return r1 or r2
22         elif grid[x][y] == 3:
23             r1,r2 = False,False
24             if y - 1 >= 0:#
25                 r1 = self.dfs(grid,visited,x,y-1,m,n)
26             if x + 1 <= m - 1:#
27                 r2 = self.dfs(grid,visited,x+1,y,m,n)
28             return r1 or r2
29         elif grid[x][y] == 4:
30             r1,r2 = False,False
31             if y + 1 <= n - 1:#
32                 r1 = self.dfs(grid,visited,x,y+1,m,n)
33             if x + 1 <= m - 1:#
34                 r2 = self.dfs(grid,visited,x+1,y,m,n)
35             return r1 or r2
36         elif grid[x][y] == 5:
37             r1,r2 = False,False
38             if x - 1 >= 0:#
39                 r1 = self.dfs(grid,visited,x-1,y,m,n)
40             if y - 1 >= 0:#
41                 r2 = self.dfs(grid,visited,x,y-1,m,n)
42             return r1 or r2
43         else:#grid[x][y] == 6
44             r1,r2 = False,False
45             if x - 1 >= 0:#
46                 r1 = self.dfs(grid,visited,x-1,y,m,n)
47             if y + 1 <= n - 1:#
48                 r2 = self.dfs(grid,visited,x,y+1,m,n)
49             return r1 or r2
50 
51     def hasValidPath(self, grid: List[List[int]]) -> bool:
52         m = len(grid)
53         n = len(grid[0])
54         visited = [[0 for _ in range(n)]for _ in range(m)]
55         return self.dfs(grid,visited,0,0,m,n)

算法思路:dfs。

这种题思路不难,但是代码量很多,而且代码很相似,如果不够仔细,很容易出错。

本题的思路是使用深度优先遍历,因为只有一条路径,因此如果能够遍历到[m-1][n-1]的位置,则表示成功。

有三种条件,则表示失败:

1.出界:不能访问超出上下左右四个边界之外的位置。

2.路径有环:访问到重复的位置。

3.无法连接的路径:这里主要是要判断地形1与地形2是无法连接的。

以上是关于leetcode1391的主要内容,如果未能解决你的问题,请参考以下文章

hihocoder 1391 树状数组

leetcode_1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold_[二维前缀和](代码片段

离线树状数组 hihocoder 1391 Countries

BZOJ 1391: [Ceoi2008]order [最小割]

Word Break

BZOJ-1391order 最小割 + 最大全闭合图