C++ 为BFS创建邻接矩阵

C++ 为BFS创建邻接矩阵,c++,graph,adjacency-matrix,breadth-first-search,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填充矩阵?我不认为我可以一个接一个地读取每个文件,因

我得到了一个包含如下数字的输入文件:

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填充矩阵?我不认为我可以一个接一个地读取每个文件,因为不是所有的行都有关于边缘的详细信息。如有任何见解,将不胜感激。谢谢

由于您几乎可以立即知道矩阵的大小,因此可以分配所需大小的邻接矩阵,然后遍历文件,在遇到边时添加边。代码的大纲可能类似于:

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;
    }
}
std::ifstream-in;
//读取目标和节点数。
int目标;
int num_节点;
在>>目标>>数量节点中;
//无论您使用的是哪种矩阵数据类型。
矩阵调整矩阵(num_节点,num_节点);
//处理每个顶点。
对于(int i=0;i>节点>>值中;
//计算顶点有多少条边。
int num_边;
在>>数字边缘中;
//处理每条边并将其添加到矩阵中。
对于(int j=0;j>其他_节点中;
//将依赖项双向添加到矩阵中。
调整矩阵[节点][其他节点]=真;
调整矩阵[其他节点][节点]=真;
}
}

假设矩阵的
用零填充,您可以这样做:

  • 读取第一个数字并将值存储在某个位置(我不知道) 理解第一个数字的真正含义)
  • 读取第二个数字并将其存储在
    n
  • 虽然没有行尾,但要做第4到8行
  • 读取数字并将其存储在变量
    v
    (数字 顶点)
  • 读取数字并将其存储在
    值[v]
    (当前值 顶点)
  • 读取编号并将其存储在
    e
    (从
    v
    第四个顶点
  • 因为我从1到e做8
  • 读取
    v1
    并将
    [v,v1]=1(如果E必须对称,则可能是E[v1,v])