2020校招远景的编程题,二维01矩阵,横竖算相连,找最大的连通区域。
思路:用一个visited列表保存已经找过的点,对没找的点,如果是1,用递归方式按上下左右四个方向找可以连在一起的点,存入一个列表,不断比较这个列表长度和之前保存的最大值来更新最大区域面积。
import sys
M,N = list(map(int,sys.stdin.readline().strip().split(",")))
mat = []
for _ in range(M):
line = list(map(int,sys.stdin.readline().strip().split(",")))
mat.append(line)
def go(i,j,f):
black = []
if 1 in f:
if j>0 and mat[i][j-1] == 1 and [i,j-1] not in visited:
black.append([i,j-1])
visited.append([i,j-1])
black.extend(go(i,j-1,[1,2,3,4]))
if 2 in f:
if i>0 and mat[i-1][j] == 1 and [i-1,j] not in visited:
black.append([i-1,j])
visited.append([i-1,j])
black.extend(go(i-1,j,[1,2,3,4]))
if 3 in f:
if j<N-1 and mat[i][j+1] == 1 and [i,j+1] not in visited:
black.append([i,j+1])
visited.append([i,j+1])
black.ext

这篇博客主要介绍了如何解决2020年校招远景编程题,即在二维01矩阵中寻找最大连通区域。通过使用深度优先搜索策略,利用Python递归遍历上下左右相邻的1值点,并维护一个visited列表记录已访问节点,动态更新最大区域面积。
最低0.47元/天 解锁文章
3602

被折叠的 条评论
为什么被折叠?



