Về các câu hỏi trong các ý kiến:
- Theo nhận xét trong mã nguồn của ví dụ VC++ có một số vấn đề với các named parameter mechanism used. Vì vậy, tôi muốn giả định rằng cả hai chi nhánh về cơ bản cùng suy nghĩ với phiên bản VC++ chỉ là tiết hơn (tôi đã không đi sâu vào nó đủ lâu để chắc chắn 100%).
- A
property_map
ánh xạ các đỉnh/cạnh tới dữ liệu bổ sung được liên kết với đỉnh/cạnh cụ thể. Ví dụ. các weightmap
trong ví dụ liên kết trọng lượng (chi phí đi lại) với mỗi cạnh.
Các predecessor_map
được sử dụng để ghi lại các đường dẫn cho tất cả các đỉnh (đối với mỗi đỉnh người tiền nhiệm trên đường dẫn từ gốc được ghi lại). Đối với lý do tại sao nó là cần thiết: Vâng thông tin đó là một cái gì đó thường hy vọng để có được ra khỏi thuật toán.
Các tham số được liệt kê rõ ràng trong description. Lưu ý hai phiên bản, một phiên bản có tham số được đặt tên và một tham số không có (phiên bản sau được sử dụng trong VC++).
bây giờ cho một bước nào bước các mã ví dụ được đưa ra trong the documentation (lưu ý rằng tôi không bao giờ thực sự sử dụng Boost.Graph, vì vậy đây là không bảo đảm về tính chính xác, tôi cũng chỉ bao gồm các bộ phận liên quan và bỏ qua #if
cho VC++):
const int num_nodes = 5;
//names of graph nodes
enum nodes { A, B, C, D, E };
char name[] = "ABCDE";
//edges of the graph
Edge edge_array[] = { Edge(A, C), Edge(B, B), Edge(B, D), Edge(B, E),
Edge(C, B), Edge(C, D), Edge(D, E), Edge(E, A), Edge(E, B)
};
//weights/travelling costs for the edges
int weights[] = { 1, 2, 1, 2, 7, 3, 1, 1, 1 };
int num_arcs = sizeof(edge_array)/sizeof(Edge);
//graph created from the list of edges
graph_t g(edge_array, edge_array + num_arcs, weights, num_nodes);
//create the property_map from edges to weights
property_map<graph_t, edge_weight_t>::type weightmap = get(edge_weight, g);
//create vectors to store the predecessors (p) and the distances from the root (d)
std::vector<vertex_descriptor> p(num_vertices(g));
std::vector<int> d(num_vertices(g));
//create a descriptor for the source node
vertex_descriptor s = vertex(A, g);
//evaluate dijkstra on graph g with source s, predecessor_map p and distance_map d
//note that predecessor_map(..).distance_map(..) is a bgl_named_params<P, T, R>, so a named parameter
dijkstra_shortest_paths(g, s, predecessor_map(&p[0]).distance_map(&d[0]));
Như tôi đã đề cập trong các ý kiến cá nhân tôi tìm lemon trực quan hơn để sử dụng sau đó Boost.Graph, như vậy có lẽ bạn có thể muốn cung cấp cho rằng một cái nhìn thay vì
bài viết một số ví dụ về những gì bạn đã thử mà không phải lo lắng ked. – Wug
"..ví dụ và tài liệu hướng dẫn" - Bạn đang sử dụng ví dụ và tài liệu nào? – hatchet
@hatchet: Tôi cho rằng đó là http://www.boost.org/doc/libs/1_38_0/libs/graph/example/dijkstra-example.cpp –