Echt? Ich würde der Matrix ein weiteres Feld gönnen (Visited:Boolean).
Betrete ich das Feld, prüfe ich, ob Visited=True, wenn ja, beende ich die Routine, ich war ja schon mal da.
Ansonsten setze ich Visited=True, suche nach weiteren Wegen und nehme aber nur die Nachbarfelder mit ins Boot, die ich noch nicht besucht habe.
Dann rufe ich mich selbst mit allen Nachbarkandidaten rekursiv auf.
Bevor ich die Routine verlasse, setze ich Visited wieder auf False:
Delphi-Quellcode:
Procedure TMatrix.Visit (Source : TPoint; Path : TPath);
Begin
If Source = FinalDestination then
Success(Path)
Else If not Self.Visited[Source] Then begin
Self.Visited[Source] := True;
Foreach Neighbor in Source.Neighbors do
If not Self.Visited[Neighbor] Then
Visit(Neighbor, Path+Neighbor)
Self.Visited[Source] := False;
End
End;
Das Bild hängt schief.