我收到一个包含这样的数字的输入文件:
3(在图中搜索值3)
5(图中的顶点数)
0 0(顶点0的值为0)
2(从顶点0添加2条边)
1(从顶点0到顶点1添加边缘)
2(从顶点0到顶点2添加边缘)
1 1(顶点1的值为1)
2(从顶点1添加2条边)
3(从顶点1到顶点3添加边缘)
4(从顶点1到顶点4添加边缘)
2 2(顶点2的值为2).......
我想使用文件中给定的数字创建一个邻接矩阵,但我不确定如何做到这一点。我如何确保我只是用0或1填充矩阵,具体取决于是否存在现有边缘?我不认为我可以逐个读取每个文件,因为不是所有的行都详细说明了有关边缘的信息。任何见解将不胜感激。谢谢!
答案 0 :(得分:0)
由于您几乎立即知道矩阵的大小,您可以分配所需大小的邻接矩阵,然后浏览文件,在遇到它们时添加边。代码大纲可能类似于:
std::ifstream in;
// Read the target and number of nodes.
int target;
int num_nodes;
in >> target >> num_nodes;
// Whatever matrix data type you are using.
matrix adj_matrix(num_nodes, num_nodes);
// Process each vertex.
for (int i = 0; i < num_nodes; ++i) {
int node;
int value;
in >> node >> value;
// Figure out how many edges the vertex has.
int num_edges;
in >> num_edges;
// Process each edge and add it to the matrix.
for (int j = 0; j < num_edges; ++j) {
int other_node;
in >> other_node;
// Add the dependency both ways to the matrix.
adj_matrix[node][other_node] = true;
adj_matrix[other_node][node] = true;
}
}
答案 1 :(得分:0)
假设您的矩阵Edges
填充了零,您可以执行以下操作:
n
。v
中(数字为
顶点)Values[v]
中(当前值
顶点)e
中(来自的边数)
v
'顶点。v1
并将Edges
[v,v1] = 1(如果E必须是对称的,可以是E [v1,v])。