gpt4 book ai didi

c++ - 如何使用boost从文件中读取图形?

转载 作者:行者123 更新时间:2023-11-28 05:38:47 25 4
gpt4 key购买 nike

我想使用 boost 从文件中读取图表。输入文件包含边数,后面是成对的边。我想打印邻接列表。我尝试了以下代码。请帮助我

    #include <boost/graph/adjacency_list.hpp>
#include <fstream>
#include <boost/graph/graphviz.hpp>
using namespace std;
using namespace boost;
int main(){
typedef adjacency_list <listS, vecS, directedS> Graph;

typedef graph_traits<Graph>::vertex_descriptor index_vertex;
typedef boost::graph_traits <Graph>::edge_iterator edgeIt;
typedef boost::graph_traits<Graph>::vertex_iterator vertexIt;
// declare a graph object
Graph G;
std::ifstream infile("di.dat");
index_vertex n_vertices;
//int n_vertices;
if(infile >> n_vertices){
std::cout << n_vertices << endl; // read in number of vertices
}
while(infile)
{
int f;
int s;
infile >> f>> s;
// std::cout<<first<<second;
add_edge(f, s, G);
}
infile.close();
for(pair<vertexIt,vertexIt> vi = boost::vertices(G); vi.first != vi.second; ++vi.first) {
cout << *vi.first << endl;
}
for(pair<edgeIt,edgeIt> ei = boost::edges(G); ei.first != ei.second; ++ei.first) {
cout << source(*ei.first, G) << " -> " << target(*ei.first, G) << endl;
//cout << *ei.first << endl;
}


ofstream dotfile;
dotfile.open("test1.dot");
write_graphviz(dotfile, G);
system("xdot test1.dot");
return 0;
}

输入是

14
1 2
2 3
3 4
3 5
4 6
6 7
7 8
7 9
7 10
8 11
9 12

12 13
13 14

最佳答案

下面是一个显示问题所在的基本示例:

#include <iostream>

int main(int argc, char**argv)
{
char j;

for (int i=0, j='a'; j<'d'; i++, j++)
{
std::cout << j << std::endl;
}

std::cout << "++++++++++" << std::endl;

for (j='a'; j<'d';j++)
{
std::cout << j << std::endl;
}

return 0;
}

输出:

97
98
99
++++++++++
a
b
c

这是抛出此错误的原因的基本示例。使用 int 初始化 edge_iterator。正如@Marvin 所说,重新访问您的循环。

关于c++ - 如何使用boost从文件中读取图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37630688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com