【发布时间】:2015-02-21 09:06:00
【问题描述】:
定义:
A(i, j) = 1 如果元素是十字的中点
A(i-1, j) = 1
A(i+1, j) = 1
A(i, j+1) = 1
A(i, j-1) = 1。
元素和中点一起在矩阵 A 中形成一个十字,其中 A 至少是一个 3×3 矩阵并且 i, j ∈ ℕ\{0} .
假设上图是 8×8 矩阵 A,其元素为自然数 1、2、3 ...。根据这个定义,矩阵总共有 3 个交叉。十字的中点位于 A(2,2)、A(5, 4) 和 A(5, 5)。
我想要做的是编写一个函数来查找矩阵 A 中的交叉数。我有一个想法,但我不确定它是否是最优的。这是它的伪代码:
ITERATE FROM row 2 TO row 7
ITERATE FROM column 1 TO column 8
IF current element contains 1
INCREMENT xcount by 1
IF xcount >= 3
CHECK IF counted 1:s is part of a cross
ELSE IF xcount IS NOT 0
SET xcount to 0
这个想法是遍历从第 2 行到第 7 行的每一列。如果我在同一行上找到 3 个连续的 1:s,我会立即检查 1:s 是否属于交叉。这应该可行,但想象一下有一个非常大的矩阵 A - 在那种情况下这段代码的效率如何?这个问题不能用矢量符号来解决吗?
非常感谢任何答案。提前致谢!
【问题讨论】:
-
你并没有真正定义什么是十字架。
ones(3,4)是否包含两个十字架? -
感谢您的提醒。我添加了一个定义。 one(3, 4) 包含两个十字架。
标签: matlab