流过二进制矩阵

时间:2016-10-18 12:36:44

标签: matlab matrix

我已经提供了一个mxn随机生成的二进制矩阵,它允许流过值1但不通过值0.我需要确定是否存在从随机生成的矩阵的顶部到底部的流路径。 1s必须彼此相邻。它适用于Matlab编程。 任何有关如何编码问题或算法示例的有用资源的参考将不胜感激。

我有一些代码,它们最初搜索顶行中的前1个。 代码therafter搜索所有周围位置,在当前1的下方和附近。流量只能沿对角线向下,直接向左或直接向右移动。

目的i,在给定上述限制的情况下,是否有办法仅在1&#39>之后从矩阵的顶部到底部进行遍历

Random=randi([0 1],6,6)


n =0;
while Random[0,n] ~= 1
        n=n+1;
end
CoOrds = [0,n];

for i = 0:5
    if Random[i+1, n-1] == 1
        n=n-1;
    elseif Random [i,n-1] == 1
        i = i-1;
        n = n-1;
    elseif Random [i+1,n] ==1
        n=n;
    elseif Random [i+1,n+1] ==1
        n=n+1;
    elseif Random[i,n+1] == 1
        i = i-1;
        n=n+1;
    end
end

1 个答案:

答案 0 :(得分:5)

您可以使用bwlabelregionprops来检查路径是否存在:

lb = bwlabel(Random, 8);  %// find 8-connected regions of the random mask
st = regionprops(lb, 'BounbdingBox');  %// find bounding boxes for all regions
b = vertcat(st.BounbdingBox);

有效路径是其边界框高度('BoundingBox'中的第4个条目)等于size(Random,1)的路径:

validPathRegion = find( b(:,4) == size(Random,1) );