CX_ACCESS_NODE::FindOptimalRoute
Beschreibung:
Eingabe ist ein Weg von einem Start-Knoten (das Objekt selbst) über einen Vektor von Knoten, die alle erreicht werden müssen, zu einem Endknoten.
Die Methode ermittelt den optimalen Weg = den Weg mit den geringsten Kosten (siehe (siehe CX_ACCESS_WAY::edgeWeight).
Abschätzung der Performance: FindOptimalRoute ruft eine interne Version von FindRouteToObject auf.
Ist die Anzahl der übergeben Zielknoten [Start, Objekte im Vektor, Ziel-Objekt] = n, muss FindRouteToObject n! / (n - 2)! mal ausgeführt werden.
Code-Beispiel:
// Construct the graph
. . .
-> origin // starting point
-> goal // end point
-> node1 ... -> node2 ... -> node3 // an optimal way MUST pass these points
0$ -> totalWeight // total costs of the optimal way (supposing CX_ACCESS_WAY::edgeWeight is describing costs in $)
[node1 node2 node3] goal totalWeight origin Call(FindOptimalRoute)
FillObox(win, route) // display the optimal way
totalWeight PutValue(win, totalWeight) // display the total costs for this way
Window(win, ....)
{
ObjectListView(route, AUTO_POSITION, ... )
INITIALIZE:
[ HEADER T("next node") "CX_ACCESS_WAY::accessNode.uniqueID" HEADER T("next node") ] SetFormat
[ HEADER T("weight") "CX_ACCESS_WAY::edgeWeight" HEADER T("weight") ] SetFormat
[ HEADER T("next node") "CX_ACCESS_WAY::accessNode.uniqueID" HEADER T("next node") ] SetFormat
[ HEADER T("weight") "CX_ACCESS_WAY::edgeWeight" HEADER T("weight") ] SetFormat
String(totalWeight, ...)
}
Stack | Position | Objekttyp | Kurzbeschreibung |
---|---|---|---|
Stack(In) | Top | CX_ACCESS_NODE | Startobjekt der Suche |
Top-1 | CX_INTEGER / CX_NUMERIC / CX_VALUE oder NULL | optional: Summe der Wegekosten für den gefundenen Weg wird in das Objekt geschrieben | |
Top-2 | CX_ACCESS_NODE | Zielobjekt | |
Stack(Out) | Top | VECTOR |
der gefundene Weg als Vektor von CX_ACCESS_WAY-Objekten |
Existiert in dem zu durchsuchenden Graph kein Weg, der alle geforderten Knoten erreicht, ist das Ergebnis eine leerer Vektor.
Wurde ein Objekt für die Wegekosten als Parameter übergeben, wird der Wert auf -1 gesetzt.