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

这是一道在面试中反复出现的问题,涉及到对0-1矩阵的连通域计数。原博文中通过DFS或BFS解决,使用邻接列表在矩阵中找到邻居节点,并通过mask标记已访问节点。Python实现中,利用numpy生成测试用例,并结合matplotlib进行可视化。虽然传统方法检测待访问节点在不在输出列表中较复杂,但Python的列表地址传递特性简化了这一过程。运行代码可观察到结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

源博客地址https://blog.youkuaiyun.com/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<m and j>=0 and j<n and mask[i][j]==0 and im[i][j]==1

    def add(self,i,j,mask,im,q):
        if self.isValid(i,j,mask,im):
            q.append([i,j])
            self.mask[i][j]=1

    def bsfsolver(self):
        m,n=self.im.shape
        res=[]
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值