bfs,同时使用队列。对比dfs,使用栈。

from collections import deque

def land(matrix):
    length=len(matrix) #数组行数
    width=len(matrix[0]) #数组列数
    re=[[0 for _ in range(width)] for _ in range(length)]
    print(re)
    direction=[[1,0],[-1,0],[0,1],[0,-1]]
    queue=deque([])
    for i in range(length):
        for j in range(width):
            if matrix[i][j]==1:
                #如果是岛(1表示岛)
                re[i][j]=0 #自己和自己距离为0
                queue.append((i,j)) #将岛屿的位置存入queue
            else:
                re[i][j]=-1 #其他值先设置为-1
    while queue:
        x,y=queue.popleft() #弹出一个坐标
        for d in direction:
            x1=x+d[0]
            y1=y+d[1]
            if x1>=0 and y1>=0 and x1<length and y1<length and re[x1][y1]==-1: #在数组范围内,且值为-1
                re[x1][y1]=re[x][y]+1 #re[x1][y1]是re[x][y]的邻接
                queue.append((x1,y1))
    return re
matrix1=[[0,0,0],
         [0,1,1],
         [0,0,0]]

matrix2=[[1,1,0],
         [1,0,0],
         [2,1,0]]

print(land(matrix1))