2010-04-09 16 views
5

Akılda tuttuğum çeşitli ağ sorunlarına uygulamak için destek grafik kitaplıklarının kullanımını araştırıyorum. DenersemGrafik kitaplıklarını artırın: kenar ağırlık değerlerini ayarlama

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

Benim sorun: I grafik kenar değerleri ("ağırlıkları") bakarak edilmiştir örneklerde

her zaman böyle bu Bellman-Ford ve Kruskal algoritmaları, örneğin olduğu gibi, tam sayıların, olarak başlatılır ve ağırlıkları ikiye katlayın, dönüşümler hakkında bir sürü uyarı mesajı alıyorum. Şimdiye kadar nasıl üstesinden gelinebileceğimi anlayamadım.

Bu konuda bir yol gören var mı?

cevap

6

Bu, weights[] dizisi ve destek grafiğiniz/algoritmanız tarafından kenar ağırlıkları için kullanılan tür arasındaki bir uyumsuzluktan kaynaklanır.

örneğin ilk bağlantılı numune olarak

, ayrıca

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

ikinci

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

yılında

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

için değişmelidir

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

Merhaba kod bu bağlantılarda görülebilir: bellman-example.cpp ve kruskal-example.cpp – AndyUK

+0

Gördüm ve buna göre cevabı güncelledi. – baol

+0

İkinci (Kruskal) için öneriniz işe yaradı, şerefe. Henüz Bellman engelini atamıyorum. – AndyUK

İlgili konular