2010-04-09 14 views
5

J'étudie l'utilisation des bibliothèques de graphe boost afin de les appliquer à divers problèmes de réseau que j'ai à l'esprit.Boost bibliothèques de graphiques: réglage des valeurs de poids de bord

Dans les exemples que j'ai regardé les valeurs de bord graphique (les « poids ») sont toujours initialisés comme des entiers, tels que dans ces algorithmes Bellman-Ford et Kruskal par exemple:

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

Mon problème est de savoir si je tente et changer les poids pour doubler, je reçois un tas de messages d'avertissement sur les conversions, etc, qui jusqu'à présent je n'ai pas été capable de comprendre comment surmonter.

Est-ce que quelqu'un voit un moyen de contourner cela?

Répondre

6

Cela est dû à une différence entre le tableau weights[] et le type utilisé pour les poids de bord par votre graphique/algorithme boost.

Dans le premier échantillon lié, par exemple, vous devez également modifier

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

à

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

Dans la deuxième

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

à

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

Salut le code peut être vu dans les liens: bellman-example.cpp et kruskal-example.cpp – AndyUK

+0

Vu et mis à jour la réponse en conséquence. – baol

+0

Votre suggestion pour la deuxième (Kruskal) a fonctionné, acclamations. Je ne peux pas encore surmonter l'obstacle de Bellman. – AndyUK