2016-10-18 10 views
1

値1を通るが0の値を通さないmxnランダム生成バイナリ行列が供給されています。上から下へのフローのパスがあるかどうかを判断する必要がありますランダム生成された行列1は互いに隣接していなければなりません。これはMatlabのプログラミング用です。 問題をコードする方法やアルゴリズムの例については、参考にしてください。バイナリ行列を通るフロー

私は最初に一番上の行の最初の1を検索するいくつかのコードを持っています。 コードtherafterは、現在の1の下に隣接するすべての周囲の位置を検索します。フローは斜めに、直接左または右に移動することができます。唯一の1の次

方法がある場合、私は行列の上から下へ横断する、上記制限が与えられ、参照するには目的が

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

「ランダム[0、n]〜= 1」 –

+0

そして、将来のすべての「ランダム」へのアクセスは、MATLAB構文を使用するように修正してください。 –

+1

[深さ優先検索(DFS)](https://en.wikipedia.org/wiki/Depth-first_search)と[幅優先検索(BFS)](https:// en.wikipedia.org/wiki/Breadth-first_search)。あなたの答えを見つけるために関数でmatlabのビルドを使用することができるかもしれませんが、私はアルゴリズムを見て、それらを学ぶことをお勧めします、彼らは非常に有用であり、広く普及しています。 – mpaskov

答えて

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)); 
関連する問題