2016-10-18 7 views
1

Ich habe eine mxn zufällig generierte binäre Matrix geliefert, die den Durchfluss durch den Wert 1 ermöglicht, aber nicht durch den Wert 0. Ich muss feststellen, ob es einen Durchflussweg von oben nach unten gibt die zufällig generierte Matrix. Die 1 müssen nebeneinander liegen. Es ist für das Programmieren in Matlab. Jeder Hinweis auf hilfreiche Ressourcen zur Codierung des Problems oder Algorithmusbeispiele wird sehr geschätzt.Durchfluss durch eine binäre Matrix

Ich habe einen Code, der zunächst nach der ersten 1 in der obersten Zeile sucht. Der Code therafter durchsucht alle umliegenden Positionen, unterhalb und neben der aktuellen 1. Der Fluss kann nur diagonal nach unten, direkt links oder direkt nach rechts bewegt werden.

Der Zweck i zu sehen, ob es einen Weg gibt, die oben genannten Einschränkungen gegeben, nur

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

Bitte korrigieren: 'while Random [0, n] ~ = 1' –

+0

Und alle zukünftigen Zugriff auf' Random' zur Verwendung der MATLAB-Syntax. –

+1

Sehen Sie sich die folgenden Algorithmen an: [Tiefensuche (DFS)] (https://de.wikipedia.org/wiki/Depth-first_search) und [Breite-zuerst-Suche (BFS)] (https: // en.wikipedia.org/wiki/Breadth-first_search). Obwohl es möglich sein könnte, Matlab-Funktionen zu verwenden, um Ihre Antwort zu finden, würde ich empfehlen, in die Algorithmen zu schauen und zu versuchen, sie zu lernen, sie sind extrem nützlich und weit verbreitet. – mpaskov

Antwort

5

ist das 1 nach von oben nach unten in der Matrix zu durchqueren Sie bwlabel und regionprops können Sie überprüfen, wenn ein Pfad vorhanden ist:

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); 

ein gültiger Pfad ist ein Pfad, dessen Begrenzungsrechteck Höhe (4-te Eintrag in 'BoundingBox') gleich size(Random,1):

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