2010-04-09 1 views
5

Sto studiando l'utilizzo delle librerie di grafici boost per applicarle a vari problemi di rete che ho in mente.Boost librerie di grafici: impostazione dei valori di peso del fronte

Negli esempi che sono stati a guardare i valori bordo grafico ("pesi") sono sempre inizializzati come interi, come in queste Bellman-Ford e Kruskal algoritmi ad esempio:

int weights[] = { 1, 1, 2, 7, 3, 1, 1, 1 }; 

Il mio problema è se provo e cambiare i pesi per raddoppiare, ricevo un mucchio di messaggi di avvertimento sulle conversioni ecc., che finora non sono stato in grado di capire come superare.

Qualcuno vede un modo per aggirare questo?

risposta

6

È causato da una mancata corrispondenza tra l'array weights[] e il tipo utilizzato per i contorni del grafico boost/algoritmo.

Nel primo campione collegato, ad esempio, si dovrebbe anche cambiare

struct EdgeProperties { 
    int weight; 
}; 
[...] 
property_map<Graph, int EdgeProperties::*>::type 

a

struct EdgeProperties { 
    double weight; 
}; 
[...] 
property_map<Graph, double EdgeProperties::*>::type 

Nella seconda

typedef adjacency_list < vecS, vecS, undirectedS, 
    no_property, property < edge_weight_t, int > > Graph; 

a

typedef adjacency_list < vecS, vecS, undirectedS, 
    no_property, property < edge_weight_t, double > > Graph; 
+0

Ciao il codice può essere visto in quei collegamenti: bellman-example.cpp e kruskal-example.cpp – AndyUK

+0

Visto e aggiornato la risposta di conseguenza. – baol

+0

Il tuo suggerimento per il secondo (Kruskal) ha funzionato, evviva. Non riesco ancora a superare l'ostacolo di Bellman. – AndyUK