2014-12-11 53 views
1

我试图实现使用增强的图形有三个不同的载体矢量图形:实现使用升压

std::vector<std::string> vertex_array; 
std::vector<Edge> edge_array; 
std::vector<int> weight_array; 

边缘被定义为:

typedef std::pair<std::string, std::string> Edge; 

和我的图被定义为:

typedef adjacency_list<vecS, vecS, undirectedS> Graph; 

的阵列都填充有我从输入文件得到的数据,所以在所述第一元件顶点向量将是类似于“A”的东西,边缘向量中的第一个元素将是类似于(B,C)的东西,并且权重向量中的第一个元素将是边缘向量中的第一个边的权重,或BC这个案例。

问题是,我不是很流利的C++,而我也是新的提升和图形。我试着在boost网站上查看示例代码,但他们都使用数组而不是向量。我没有尝试这个例子代码:

Graph g(edge_array, edge_array + sizeof(edge_array)/sizeof(Edge), num_vertices); 

和我有一个为num_vertices变量,但它仍然是给我的错误。

有谁知道如何创建一个边缘,顶点和权重的矢量图,我最终能够使用Dijkstra的增强版?

对不起,如果这个问题确实是模糊或基本的,我真的不知道使用boost和实现图的任何事情。

+0

尝试'图G(edge_array [0],&edge_array [0] + edge_array.size(),为num_vertices);' – 2014-12-11 03:04:43

+0

@MattMcNabb它摆脱了红色波浪线,但它给我的编译器错误C2182:非法使用类型'void' – user3543260 2014-12-11 03:44:26

回答

1

docs

类型Graph必须顶点列表和图表发病图表的典范。

an example too使用的adjacency_list图。

当您样品中vecS取代listS,完全相同的响应返回(我没有检查所有的代码,这种变化的理智虽然)


typedef adjacency_list<vecS, vecS, undirectedS> Graph; 

从这一行就似乎边上没有weight属性。对于Dijkstra来说,选择没有这些信息的最佳路径会变得困难。从快速浏览文档,我认为你可以提供一个外部的weight地图。另请注意:

当所有边权重等于1时,使用广度优先搜索而不是Dijkstra算法。