Wenn es um Matrix-Traversals und jede Art von Suche geht, finde ich, dass ich oft ein potenzielles Element validieren muss, um es entweder zu meiner Warteschlange hinzuzufügen oder zu rekursieren.Suche nach Ausnahmen in Zählinseln
sagen wir an dieser Matrix freuen:
var matrixTest = [
[1,1,0,0,0],
[1,1,0,0,0],
[0,0,1,0,0],
[0,0,0,1,1]
]
In diesem Fall bin ich Iterieren alle Artikel über und Durchführen einer BFS (Markierung als besucht), wenn ich einen 1.
Ich begegne habe eine Subroutine innerhalb meiner BFS-Funktion, die bei einer Koordinate r und c alle möglichen von ihr ausgehenden Pfade validiert (r + 1, r-1, c + 1, c-1).
Das Problem ist mit diesem Stück Code
if(!visitMap[r+1][c] && matrix[r+1][c] === 1) {
q.push([r+1, c])
}
visitMap eine Matrix I ist neben dem Algorithmus erstellt, um sicherzustellen, ich bin nicht einen Punkt Verarbeitung zweimal
Matrix wird die Eingangsmatrix
Es scheint jedoch, dass ich die Eingaben vor dem Test validieren muss, da JavaScript diesen Fehler verursacht
Ich nehme an, das bedeutet, dass mein "r + 1" -Ausdruck außerhalb der Grenzen der Matrix liegt und somit als undefiniert abläuft.
Es scheint äußerst mühsam, eine weitere Schicht von Wenn/Dann-Fluss hinzuzufügen, um die Grenzen von r + 1, r-1, c + 1, UND c-1 zu überprüfen.
Gibt es ein bestimmtes Codemuster, das Sie verwenden sollten, um dies häufig zu vermeiden?
ansonsten denke ich, der Codeblock wird wie folgt aussehen:
if (r+1 < matrix.length) {
if(!visitMap[r+1][c] && matrix[r+1][c] === 1) {
q.push([r+1, c])
}
}
'if (! Matrix [r] || ! matrix [c]) 'würde nur für eine quadratische Matrix funktionieren. Die OP-Testmatrix ist 5x4 und diese Funktion wird immer 'falsch' zurückgeben und niemals den zweiten Test für (r = 3, c = 4) ausführen. – Arnauld