2017-12-18 4 views
-1

Ich habe eine Matrix und jeder ihrer Spalten repräsentiert eine Folge von Punkten, um genauer zu sein:Gibt es eine Möglichkeit, all diese möglichen Pfade zu berechnen und zu speichern?

1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1 
6  6  6  6  5  5  5  5  4  4  4  4  3  3  3  3  2  2  2  2 
5  4  3  2  6  4  3  2  6  5  3  2  6  5  4  2  6  5  4  3 
1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1 
2  2  2  3  2  2  2  3  2  2  2  3  2  2  2  4  3  3  3  4 
3  3  4  4  3  3  4  4  3  3  5  5  4  4  5  5  4  4  5  5 
4  5  5  5  4  6  6  6  5  6  6  6  5  6  6  6  5  6  6  6 

1 steht für eine Punktnummer, 2 für zwei Punktnummer, und so weiter. Also, wie oben gesagt, jede Spalte repräsentiert eine andere Konfiguration einer Menge von Punkt (x und y Koordinaten).

Wenn die Menge der Punkte ist:

(1,9) 
(2,5) 
(3,7) 
(4,2) 
(2,1) 
(2,3) 

dann ein möglicher Weg, nach der ersten Spalte ist:

(1,9) 
(2,3) 
(2,1) 
(1,9) 
(2,5) 
(3,7) 
(4,2) 

Gibt es eine Weise, die ich alle diese möglichen Konfigurationen und speichert berechnen kann Sie?

Als ich das erste Mal an dieses Problem herangegangen bin, wusste ich nichts über die Graphentheorie, deshalb benutze ich es bisher nicht.

+0

Warum haben Sie Nummer 1 in jeder Spalte dupliziert? Suchen Sie einfach nach den Permutationen von '1: 6', oder gibt es Konnektivitätsinformationen, die bestimmen, welcher Punkt einem bestimmten Punkt folgen kann? – beaker

+0

könnten Sie sie als Konnektivitätsmatrix präsentieren? Ich habe eine Lösung, wie man alle möglichen Hamiltonian Wege findet und speichert – zlon

+0

Beaker, die 1 stellen den Startpunkt dar, und ich wollte an den Ostpunkten in den gleichen Wegen verbinden, deshalb die Wiederholung. Zlon, wahrscheinlich ist es möglich, ich denke, es ist auch mit Grafiken verwendet, kann ich bitte Ihre Lösung sehen? – user158013

Antwort

0

Ich verstehe die Logik hinter der vierten Zeile Ihrer Sequenzmatrix nicht. Es ist mit 1 gefüllt, aber sie scheinen von Ihrem Beispiel vollständig ignoriert zu werden. Respektieren Ihr Beispiel angesichts der Punkte:

(1,9) (2,5) (3,7) (4,2) (2,1) (2,3) 

und die erste Spaltenreihenfolge:

1 6 5 1 2 3 4 

die ausgegeben werden soll:

(1,9) (2,3) (2,1) (1,9) (2,5) (3,7) (4,2) 

und nicht:

(1,9) (2,3) (2,1) (2,5) (3,7) (4,2) 

Da weiss ich nicht wie deine Skripte funktionieren sollen ork und wie ich mit der vierten Reihe befassen sollte, implementiert ich einen Code, der diese Logik zu ignorieren, das Ergebnis produzieren, die die naheliegendste mir scheint:

seq = [ 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    6 6 6 6 5 5 5 5 4 4 4 4 3 3 3 3 2 2 2 2 
    5 4 3 2 6 4 3 2 6 5 3 2 6 5 4 2 6 5 4 3 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    2 2 2 3 2 2 2 3 2 2 2 3 2 2 2 4 3 3 3 4 
    3 3 4 4 3 3 4 4 3 3 5 5 4 4 5 5 4 4 5 5 
    4 5 5 5 4 6 6 6 5 6 6 6 5 6 6 6 5 6 6 6 
]; 

pts = { 
    [1 9] 
    [2 5] 
    [3 7] 
    [4 2] 
    [2 1] 
    [2 3] 
}; 

paths = pts(seq); 

Dann, um die Pfade Sie können den Zugriff, zum Beispiel:

for i = 1:size(paths,2) 
    disp(cell2mat(paths(:,i))) 
end 

oder:

paths = cell2mat(paths); 

for i = 1:2:(size(paths,2)/2) 
    x = paths(:,i); 
    y = paths(:,i+1); 
    disp([x y]); 
end 
+0

Ja, mein Skript produziert genau das, wonach Sie suchen. –

+0

Ja, ich brauche auch Zugang zu den Punkten und ich kann mit cell2mat(), weißt du elegantere Lösungen? (Danke!) – user158013

+0

Was ist in Cell2mat nicht elegant genug?Sie verdoppeln die Anzahl der Zeilen, so dass Sie x/y Paare alle 2 Spalten haben. –

Verwandte Themen