2020校招面试高频题,给定0-1矩阵,求其连通域的个数

面试某宇宙条,第一次让写,不会。

面试某bigo,第二次让写,不会。

面试某汤,第三面让写,不会。

真高频面试题。。。。。。。。。。。。。

源博客地址https://blog.csdn.net/wphkadn/article/details/100125148,

看完他的叙述以后豁然开朗,建议先点开链接阅读原文章,其实就是一个简单的dfs或bfs问题。

在一般的无向图遍历中,一般邻近节点储存在邻接列表里,故而遍历时有针对性地选取当前节点的邻居加入待访问集合就可以轻松完成访问,而对于矩阵这种图的表示形式(严格称为栅格),却需要自己以某种规律寻找当前节点的邻居集合。

import numpy as np
import matplotlib.pyplot as plt


class solution:
    def __init__(self,im):
        self.im=im
        m,n=im.shape
        self.mask=[[0 for _ in range(n)] for _ in range(m)]
    def isValid(self,i,j,mask,im):
        m,n=im.shape
        return i>=0 and i=0 and j

代码中为了测试方便,使用numpy生成测试用例,同时使用plt在图像上标记连通域的位置与次序,并且可视化。

其中使用DFS和BFS唯一的区别就是 temp=P.pop() 或是直接 temp=P.pop(0)

设计mask标记的的目的是标记已经访问过的节点坐标,设置为1.

传统的方法是检测待访问节点在不在输出list里,貌似有点难实施。

python中list是地址传递,故可以当做形参传入函数,完成更新。

 

由于不会上传图片,自己跑一下就能看到结果。

2020校招面试高频题,给定0-1矩阵,求其连通域的个数_第1张图片

 

你可能感兴趣的:(数据解构与算法)