• 基础题笔记(四):独立小岛个数


    0为海洋,1为陆地,相连陆地组成小岛

    求独立小岛个数

    其实非常简单,只需要把每个不在标记内的点都进行一次深度搜索再标记即可

    这里标记用的是path,其实也可以将走过的点标记为-1

    备注:这其实就是一个求图中独立子图的个数问题,这个算法也叫Floodfill(种子填充法)

    在计算机图形学中有广泛应用,可以用于图像分割,物体识别,绘图中的油漆桶工具,魔术棒工具

    具体实现为查找种子点周边的点,将种子点颜色相近的点(可设置阀值)入队作为新种子,对新入队的种子进行同样的扩展操作

    这样就选取了和最初种子相近颜色的区域

    island=[[1,1,1,1,0,1,0,1,0],
            [1,0,1,0,0,0,0,1,1],
            [1,0,0,0,1,1,0,0,0],
            [1,1,1,1,1,0,1,1,0],
            [0,0,1,0,0,1,0,0,1],
            [0,1,0,1,1,1,1,1,0]]
    
    
    def dfs(path,cX,cY):
        
        connect=[(0,1),(1,0),(-1,0),(0,-1)]
        for c in connect:
            nX=cX+c[0]
            nY=cY+c[1]
            
            if nX>=0 and nX<6 and nY>=0 and nY<9:
                
                if (nX,nY) not in path and island[nX][nY]!=0:
                    path.append((nX,nY))
                    dfs(path,nX,nY)
    
    def get_island_num(path,count):
        for i in range(6):
            for j in range(9):
                if island[i][j]==1 and (i,j) not in path:
                    count+=1
                    dfs(path,i,j)
        return count
                    
    counts=0
    paths=[]
    print(get_island_num(paths,counts))
    可以直接留言交流问题或想法,每天都会看
  • 相关阅读:
    C# 线程间互相通信
    COM组件的使用方法
    C++基于ATL工程编写ActiveX控件步骤
    VC++编写ActiveX控件
    C#协作试取消线程
    Asp.net的内置对象!!!
    C#的三大特性
    类的静态方法。。。。。
    页面的生命周期
    .net面试题 2016
  • 原文地址:https://www.cnblogs.com/shitianfang/p/12382850.html
Copyright © 2020-2023  润新知