2010-04-09 8 views
5

Estoy investigando el uso de las bibliotecas de gráficos de impulso para aplicarlas a varios problemas de red que tengo en mente.Bibliotecas de gráficos Boost: configuración de valores de pesaje de borde

En los ejemplos que he estado buscando en los valores de borde gráfica ("pesos") son siempre inicializados como enteros, como en estos Bellman-Ford y Kruskal algoritmos por ejemplo:

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

Mi problema es si lo intento y cambiar los pesos al doble, recibo un montón de mensajes de advertencia sobre las conversiones, etc., que hasta ahora no he podido descifrar cómo superarlos.

¿Alguien ve una forma de evitar esto?

Respuesta

6

Se debe a una falta de coincidencia entre la matriz weights[] y el tipo utilizado para los pesos de borde por su gráfico/algoritmo de refuerzo.

En la primera muestra vinculado, por ejemplo, también debe cambiar

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

a

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

En la segunda

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

Hola, el código se puede ver en esos enlaces: bellman-example.cpp y kruskal-example.cpp – AndyUK

+0

Visto y actualizado la respuesta en consecuencia. – baol

+0

Su sugerencia para el segundo (Kruskal) ha funcionado, ¡salud! Todavía no puedo superar el obstáculo de Bellman. – AndyUK

Cuestiones relacionadas