我有一组5x5布尔矩阵,例如如下:
0 1 0 1 1
1 1 1 0 0
1 0 0 1 1
1 1 1 1 0
0 0 0 0 1
而且我想要一种输出方式,对于每个连接的 1 序列(连接意味着 1 在另一个 1 的左侧、右侧、上方或下方,对角线不计算在内)它在 x 轴上占用的长度和长度它占据了 y 轴。这个矩阵的 EG 会有一个从左到右一直走,所以 x 中有 5 个单位,y 中有 4 个单位:
1
1 1 1
1 1 1
1 1 1 1
右上角还会有一个集合,在 x 中有 2 个单位,在 y 中只有 1 个:
1 1
并且在右下角会有一个在 x 中仅占 1,在 y 中仅占 1。
我希望这个矩阵沿着 xmax1=5 ymax1=4, xmax2=2 ymax2=1, xmax3=1 ymax3=1 的线输出一些东西。我设法制作了一些符合正确路线的代码,但仅适用于简单的矩阵。例如,只有一组连接的 1,并且 xmax 和 ymax 只是简单的直线,例如我可以这样做:
1 1 1 1 0
0 1 0 0 0
1 1 0 0 0
1 1 0 0 0
0 1 0 0 0
因为最长的 x 路径是一条穿过顶部的直线,最长的 y max 是一条向下的直线。但是,如果它开始“蛇”,例如:
0 0 1 0 0
0 1 1 0 0
0 1 0 0 0
0 1 1 0 0
0 0 1 1 1
我会得到 ymax=3 和 xmax=3 的结果,因为它们是最长的直线,而不是实际上应该是最远的直线的长度,所以在这种情况下应该是 ymax=5 和 xmax =4
我是 MatLab 的新手并试图自学,因此我想我可以想到很多可行的方法,但是我想不出如何实现它们。我尝试了多种方法,但我不太想如何正确实施它们。
感谢您的任何帮助。