我已经提供了一个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
答案 0 :(得分:5)
您可以使用bwlabel
和regionprops
来检查路径是否存在:
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) );