查找矩阵中的面积数

2024-01-09

假设我有一个像这样的矩阵:

1 1 1 0 0 0
1 1 1 0 0 1
0 0 0 0 0 1

如果两个“1”彼此相邻(仅水平和垂直),因此属于同一区域。我需要找出矩阵中有多少个这些区域。您可以看到该矩阵中有两个区域为“1”。我已经尝试解决这个问题几个小时了,但是代码变得非常大而且令人厌恶。有没有我可以采用的算法来解决这个问题?


如果你真的不关心:

  • 保持输入矩阵完整

  • 性能和优化

那么这是我对 C 中这个问题的看法:

#include <stdio.h>

#define X       8
#define Y       4

#define IGN     1

int A[Y][X] = {
        { 1, 1, 1, 0, 0, 0, 0, 1 },
        { 1, 1, 1, 0, 0, 1, 0, 1 },
        { 0, 0, 0, 0, 0, 1, 0, 1 },
        { 0, 0, 0, 0, 0, 1, 1, 1 },
};

int blank(int x, int y) {
        if ((x < 0) || (x >= X) || (y < 0) || (y >= Y) || (A[y][x] == 0))
                return 0;

        A[y][x] = 0;

        return 1 + blank(x - 1, y) + blank(x + 1, y) + blank(x, y - 1) + blank(x, y + 1);
}

int main() {
        int areas = 0;

        int i, j = 0;

        for (i = 0; i < X; ++i)
                for (j = 0; j < Y; ++j)
                        if (A[j][i] == 1)
                                if (blank(i, j) > IGN)
                                        areas++;

        printf("Areas: %i\n", areas);

        return 0;
}

一旦它遇到一个1,它递归地扩展到所有相邻的1元素,计算它们并将它们转化为0。如果该区域的大小大于IGN,然后将其考虑在内。

Notes:

  • 如果需要保留原始矩阵,则必须使用副本进行输入。

  • 如果您打算使用它,您可能应该将此代码转换为从参数获取数组及其大小的函数。全局变量和算法实现main()应该避免,但我在这种情况下破例了,因为它降低了代码的复杂性,并且让算法更加清晰。

  • With IGN set to 1,单独的元素不被视为一个区域。改变IGN to 0也会得到那些。

  • The if (A[j][i] == 1)循环中的条件并不是绝对必要的,但它可以通过避免不必要的函数调用来进行次要优化,尽管编译器优化可能会使其变得多余。

  • 您可以轻松修改它以获得每个区域中的元素列表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找矩阵中的面积数 的相关文章

  • 从 n,k 维矩阵数组中减去 n,k 维矩阵

    如果我有一个数组A A lt array 0 c 4 3 5 for i in 1 5 set seed i A i lt matrix rnorm 12 4 3 如果我有矩阵 B set seed 6 B lt matrix rnorm
  • 使用 Matrix.setPolyToPoly 选择位图上具有 4 个点的区域

    我正在 Android 上使用位图 在使用 4 个点选择位图上的区域时遇到问题 并非所有 4 点组都适合我 在某些情况下 结果只是一个空白位图 而不是裁剪后的位图 如图所示 并且 logcat 中没有任何错误 甚至是内存错误 这是我用来进行
  • 将 OpenCV Mat 转换为数组(可能是 NSArray)

    我的 C C 技能很生疏 OpenCV 的文档也相当晦涩难懂 有没有办法获得cv Mat data属性转换为数组 NSArray 我想将其序列化为 JSON 我知道我可以使用 FileStorage 实用程序转换为 YAML XML 但这不
  • 查找一个二维矩阵是否是另一个二维矩阵的子集

    最近我参加了一个黑客马拉松 我了解到一个问题 试图在 2d 矩阵中找到网格形式的模式 模式可以是 U H 和 T 并由 3 3 矩阵表示 假设我想展示 H 和 U 1 0 1 1 0 1 1 1 1 gt H 1 0 1 gt U 1 0
  • python中的张量点运算

    我有两个数组A 1 2 3 and B 1 0 1 0 问题是如何在 python 中执行张量点积 我期待得到 C 1 2 3 0 0 0 1 2 3 0 0 0 函数 np tensordot 返回有关数组形状的错误 对这个问题稍微补充一
  • 如何从一个清晰的例子计算二维图像中的吉布斯能量

    我有一个关于矩阵的有趣问题 在吉布斯分布中 吉布斯能量U x 可以计算为 这是所有可能的派系 C 上的派系势 Vc x 的总和 右图 团 c 被定义为 S 中站点的子集 x 蓝色像素的邻域是左图中黄色像素的邻居 其中每对不同的站点都是邻居
  • MATLAB:MEX 矩阵除法给出的结果与 m 文件不同

    我使用 MATLAB 的编码器工具创建了矩阵指数函数的 MEX 版本 以在另一组函数中使用 问题是 MEX 版本给出的结果与原始 m 文件不同 经过调试 我认为这是因为MEX文件和m文件没有做相同的矩阵除法 或者 MEX 文件首先就有问题
  • 计算按前两列中的索引分组的 numpy 数组条目的第 N 列的总和?

    我想循环以下内容check matrix以这样的方式 代码可以识别第一个和第二个元素是否是1 and 1 or 1 and 2ETC 然后对于每个单独的类对 即1 1 or 1 2 or 2 2 代码应将最后一个元素 在本例中索引为 8 乘
  • 更快地评估从右到左的矩阵乘法

    我注意到以二次形式评估矩阵运算右到左明显快于左到右在 R 中 取决于括号的放置方式 显然它们都执行相同的计算量 我想知道为什么会这样 这与内存分配有什么关系吗 A 5000 5000 B 5000 2 A matrix runif 5000
  • CUDA 添加矩阵的行

    我试图将 4800x9600 矩阵的行加在一起 得到一个 1x9600 的矩阵 我所做的是将 4800x9600 分成 9 600 个矩阵 每个矩阵长度为 4800 然后我对 4800 个元素进行缩减 问题是 这真的很慢 有人有什么建议吗
  • 在C中分配矩阵

    我想分配一个矩阵 这是唯一的选择吗 int mat int malloc rows sizeof int for int index 0 index
  • 矩阵相加的时间复杂度

    我很难解决有关矩阵求和的算法问题 我正在努力解决的问题如下 存在一个由任意值初始化的 N N 矩阵 A 给定 5 个值 R1 R2 C1 C2 和 V 有如下程序 1 R1 R2 C1 C2 N 个整数 V 实数 for k 1 to N
  • 在c中用以下结构填充矩阵

    我有以下结构 typedef struct arr integer int size int arr arr arr integer arr arr integer alloc arr integer int len arr arr int
  • Python矩阵问题[重复]

    这个问题在这里已经有答案了 这是从这个线程继续的 Python矩阵 有什么解决方案吗 https stackoverflow com questions 5835583 python matrix any solution Input fr
  • 用 R 代码编写 Householder QR 分解函数

    我正在编写一段代码来查找 R 中矩阵的 QR 分解 X lt structure c 0 8147 0 9058 0 127 0 9134 0 6324 0 0975 0 2785 0 5469 0 9575 0 9649 0 1576 0
  • 有没有比“[”更快的方法来对稀疏矩阵进行子集化?

    我是 seqMeta 包的维护者 正在寻找如何加速将大矩阵多次分割成小块的瓶颈的想法 背景 seqMeta 包用于分析遗传数据 所以你有一组受试者 n subject 和一些遗传标记 n snps 这导致 n subject x n snp
  • Numpy:查找两个 3-D 数组之间的欧几里德距离

    给定两个维度为 2 2 2 的 3 D 数组 A 0 0 92 92 0 92 0 92 B 0 0 92 0 0 92 92 92 如何有效地找到 A 和 B 中每个向量的欧几里得距离 我尝试过 for 循环 但速度很慢 而且我正在按 g
  • 对矩阵进行舍入,保留行和列总计

    想要 以保留行和列总计的方式对矩阵进行舍入的 伪 代码 问题从向量开始 X and Y of 非负整数 with Sum X Sum Y 想要圆X Y Sum X 同时保留行和列总计 这是婚姻问题的一种 Xa需要进行一定次数的握手 拨打该号
  • 更快的四元数向量乘法不起作用

    我的数学库需要一个更快的四元数向量乘法例程 现在我正在使用规范v qv q 1 它产生的结果与向量乘以由四元数组成的矩阵相同 所以我对它的正确性充满信心 到目前为止 我已经实现了 3 种替代 更快 的方法 1 我不知道我从哪里得到这个 v
  • (C) 获取矩阵中一行的 3 个最小元素,并随机选择一个

    我有一个 8x8 矩阵 在选择我想要的行后 我想获得它的三个最小元素 并随机选择这三个元素之一 问题是我不知道如何处理这三个要素 我只知道如何获取最小元素 即下面的代码 int piezas 8 8 0 2 2 5 3 2 1 1 0 4

随机推荐

  • C# 中属性声明中的“new”关键字

    我需要维护一个 NET 项目 我只是浏览代码 我在属性声明中注意到了这一点 public new string navUrl get return set 我想知道什么是new修改器对属性做什么 它隐藏了基类的 navUrl 属性 看新修改
  • 在已设置的图像 swift 4 之上加载图像的问题

    我的 cellForItemAtIndexPath 中遇到问题 我将图像设置为单元格的 UIButton 但每次滚动 collectionView 的单元格时 它都会一次又一次地将图像放置在已设置的图像之上 我可以看出 因为图像的阴影越来越
  • Msbuild ItemGroup 排除不适用于通配符

    该项目组ItemsFromAnotherTarget包含 References AnotherFolder ReferencedAssembly dll bin GeneratedAssembly1 dll bin GeneratedAss
  • React 原生导航 useTheme()

    我正在尝试直接从样式访问 useTheme 但到目前为止我的解决方案似乎不起作用 我没有返回错误 有办法做我想做的事吗 import StyleSheet from react native import useTheme from rea
  • 如何测试 RSpec 中是否调用方法但不覆盖返回值

    已经有问题 https stackoverflow com questions 21262309 rspec test to see if a method was called与此类似 但它们都将返回值重写为nil unless and
  • JavaScript - 在 Safari 上执行代码之前可用的对象定义

    我只需要在页面加载时执行一次的对象和函数被包装在undefined检查物体 在我通常使用的 Windows Linux 上的 Chrome 上 代码运行得很好 即代码只执行一次 但在 iPad 和 MacBook 上的 Safari 上 未
  • 为什么我无法在 C# 中序列化元组? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么 XML Serialized 类需要无参数构造函数 https stackoverflow com questions 267724 why xml serializable class ne
  • 沿着贝塞尔曲线路径放置图像

    有谁知道如何沿着贝塞尔路径放置图像 我可以很好地编写路径并沿着路径为精灵设置动画 但我想让路径成为一系列箭头而不是虚线 我认为一定有一种方法可以在整个路径上添加箭头图像 但找不到它 而且路径都是弯曲的 UIBezierPath path U
  • 如何复制带有指向内部数据的指针的结构(以便复制它们指向的指针和数据)?

    所以我有一个像这样的结构 struct GetResultStructure int length char ptr 我需要一种方法来制作它的完整副本 这意味着我需要一个副本来拥有一个结构 其中新的 ptr 指向我在原始结构中拥有的数据副本
  • 自定义 datagridview 的结果

    当我的客户 BindingSource 从 datagridview 搜索客户时 当找不到匹配项时 我需要一个显示 未找到结果 的消息框 而不仅仅是 什么也不显示 尝试这个 Dim emptyRowCount As Integer IIf
  • 使用调色板功能时使 NA 透明

    这是我的数据框 Test structure list Corr p c 0 65 0 64 0 64 NA 0 79 0 77 Case p c 24 57 12 89 20 92 NA 11 1 12 2 Control p c 16
  • 为绘图应用程序添加撤消功能

    我关注了一个raywenderlich 教程 http www raywenderlich com 87899 make simple drawing app uikit swift关于使用 UIKit 制作绘图应用程序 我现在正在尝试添加
  • 居中位图标记(Google 地图 Android API v2)

    当我从自定义位图中添加标记时 标记未以我指定的点为中心 我这样添加 ID tramo final int tramoId tr getId Nodos final Nodo nodos tr getNodos final PolylineO
  • 如何使用 php 解析 .plist 文件?

    我可以用 php 解析 plist 文件并将其放入数组中吗 POST 这样我就可以打电话 POST body 并获取具有以下内容的字符串
  • 如何在 Emacs 中突出显示选项卡

    我在源代码中使用空格进行缩进 如何突出显示 标记代码中的选项卡 可能是红色的 和我用的时候一样 setq default show trailing whitespace t 作为 abo abo 的提示 我发现我可以在以下代码中使用空白模
  • HttpClient 存储在哪个程序集中

    我想使用HttpClient来自 WCF Rest Service 的类 用于创建调用 Rest 的客户端 服务 我听说它已被纳入 net 4 0 但不知道它存储在哪个程序集中 根据这个 MSDN 页面 http msdn microsof
  • ViewModel 中的 ASP.NET MVC SelectList

    我正在使用 ASP NET MVC 5 但这很可能也适用于以前的版本 提出这个问题的最佳方法是向您展示代码 这是视图模型 public class PersonCreateViewModel public SelectList cities
  • 有没有办法将 UNC 路径映射到 Windows 2003 上的本地文件夹?

    我知道我可以将 UNC 路径映射到本地驱动器号 但是 我想知道是否有办法将 UNC 路径映射到本地文件夹 我有一个程序 其中硬编码到程序中的特定文件夹 我想尝试创建一个映射到 UNC 路径的同名文件夹 以便可以从网络共享访问数据 这可行吗
  • R 中的跟踪函数

    我想跟踪一个函数 以便它在调用时打印它的所有参数 当它返回结果时 它会打印返回值和参数 函数跟踪允许定义在进入和退出函数调用时要执行的操作 是否有一个函数返回函数内的参数列表 是否有一种方法无需执行多个分支中的每个分支即可获取结果值 每个分
  • 查找矩阵中的面积数

    假设我有一个像这样的矩阵 1 1 1 0 0 0 1 1 1 0 0 1 0 0 0 0 0 1 如果两个 1 彼此相邻 仅水平和垂直 因此属于同一区域 我需要找出矩阵中有多少个这些区域 您可以看到该矩阵中有两个区域为 1 我已经尝试解决这