为BFS创建邻接矩阵

时间:2015-12-05 04:39:13

标签: c++ graph adjacency-matrix breadth-first-search

我收到一个包含这样的数字的输入文件:

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填充矩阵,具体取决于是否存在现有边缘?我不认为我可以逐个读取每个文件,因为不是所有的行都详细说明了有关边缘的信息。任何见解将不胜感激。谢谢!

2 个答案:

答案 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填充了零,您可以执行以下操作:

  1. 读取第一个数字并将值存储在某处(我没有 理解第一个数字是什么,实际上。)
  2. 阅读第二个号码并将其存储在n
  3. 虽然没有行结束,但行4..8
  4. 读取数字并将其存储在变量v中(数字为 顶点)
  5. 读取数字并将其存储在Values[v]中(当前值 顶点)
  6. 读取数字并将其存储在e中(来自的边数) v'顶点。
  7. 我从1到e做8。
  8. 阅读v1并将Edges [v,v1] = 1(如果E必须是对称的,可以是E [v1,v])。