2012-04-11 12 views
1

Bevor Sie anfangen zu lesen, um Ihnen zu helfen meine Frage zu verstehen, ich sage, dass ich den Code aus diesem Link kopiert habe: Dijkstra Shortest Path with VertexList = ListS in boost graphBoost :: Dijkstra Kürzester Pfad, wie erhält man den Vertex-Index vom Pfad-Iterator?

Also .. ich meinen Programmcode ist Umschreiben Boost zu verwenden, aber jetzt, wenn 99% ist bereit Ich bin mit meinem GPS fest (für ein Spiel). Ich habe eine Liste von Knoten, die ich in einer Weise hinzugefügt habe, die glücklicherweise leicht in die Boost-Methode umgewandelt werden konnte. Das, was ich tun musste, war erstellen Sie einfach eine vertice Variable wie folgt aus:

Vertex Vx[MAX_NODES]; 

Ich kopierte die typedefs von der Verbindung, die ich gegeben habe.

So wie ich Eckpunkte hinzuzufügen, ist dies:

  stringstream s; 
      s << i; 
      Vx[i] = add_vertex(s.str(),dgraph); 

Wo "i" eine ganze Zahl gleich. (zB int i = 9)

Und Eges sind auch einfach hinzuzufügen. Jetzt habe ich mein eigenes strukturiertes Array namens "xNode". und zB: xNode [i] enthält alle Informationen für X Y Z-Positionen (xNode [i] .X xNode [i] .Y usw.) der Knoten. Jetzt

wenn der Code-Snippet aus dem Link unter Verwendung Ich habe dies getan:

// Write shortest path 
std::cout << "Shortest path from " << startid << " to " << endid << ":" << std::endl; 
float totalDistance = 0; 
for(PathType::reverse_iterator pathIterator = path.rbegin(); pathIterator !=  path.rend(); ++pathIterator) 
{ 
    std::cout << source(*pathIterator, dgraph) << " -> " <<  target(*pathIterator, dgraph) 
    << " = " << get(boost::edge_weight, dgraph, *pathIterator) <<  std::endl; 
} 

Und das ist, wo ich stecken bin, als "Quelle (* pathIterator, dgraph)" und „Ziel (* pathIterator, dgraph) "Adressen holen, aber ich brauche die Vertex-Indizes, um auf xNode [i] zuzugreifen, ich bin die NodeID (oder auch die vertikale ID | Vx [i]). Wie kann ich das tun?


EDIT: Ich habe versucht zu tun:

for(PathType::reverse_iterator pathIterator = path.rbegin(); pathIterator !=  path.rend(); ++pathIterator) 
{ 
    for(int i = 0; i < MAX_NODES; ++i) 
    { 
     if(source(*pathIterator, dgraph) == *((Vertex*)Vx[i])) 
     { 
      cout << " " << i << " " << endl; 
      break; 
     } 
    } 
} 

aber gerade abstürzt ..

Antwort

3

Mit den typedef s von dieser Frage, können Sie get(boost::vertex_index, dgraph, v) verwenden Sie den Index von v zu erhalten . Sie können auch die Eigenschaftskarte-Cache:

IndexMap vi = get(boost::vertex_index, dgraph); 

dann get(vi, v) verwenden Sie den Index für v zu bekommen.

+0

Danke, Endlich habe ich bekommen (vi, source (* pathIterator, dgraph)) und das funktioniert super! –

Verwandte Themen