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 a