使用向量创建邻接矩阵

Creating an Adjacency Matrix with Vectors

提问人:osiris 提问时间:10/5/2023 最后编辑:kiner_shahosiris 更新时间:10/5/2023 访问量:46

问:

我在想出一种算法来创建邻接矩阵时遇到了麻烦。现在我觉得我正在走上一条非常复杂的道路,我想知道是否有更好的选择?我目前的算法旨在按如下方式工作:我有一个名为 map 的对象,它由另一个称为 territory 的对象构建,每个对象都有各种相邻的领土。我已将区域名称的完整列表保存为地图对象中的字符串向量。在 territory 对象中,我还以字符串向量的形式存储了相邻 territory 的完整列表。在地图对象中,我还有一个包含所有领土对象的 Territories 向量。在我的地图对象中,我有一个 2D int 向量作为邻接矩阵。该函数假定为:

  • 解析字符串和 Territory 向量的每个索引
  • 将当前索引 i 记录为行号
  • 在通过相邻区域数组的每个索引循环上
  • 返回相邻区域的相应名称出现在字符串向量中的索引(将每个区域的相邻区域与区域字符串向量进行比较,以查找它们在向量中的位置)。此索引将为列 (col)
  • 最后在两个区域之间添加边缘。

我发现这非常复杂,我相信有更好的方法可以解决这个问题。我尝试使用<string, Territory>对地图实现这一点,但是地图没有保持它们出现的顺序,这在打印邻接矩阵本身时会导致问题。任何帮助都会很棒,如果您认为我的实现是要走的路,那么有关返回 col 索引的一些帮助将不胜感激,我在这里的语法有问题(没有 C++ 背景,只是在学习它)!

您可以在下面找到我尝试过的代码(注释掉的部分是我尝试使用键值映射实现它)。当前输出是一个填充 0 的数组。

void Map::createAdjacencyMatrix(){
    // Resize the adjacency matrix to the size of allTerritories
    adjacencyMatrix.resize(allStringTerritories.size(), vector<int>(allStringTerritories.size(), 0));

    for(int i=0; i<allStringTerritories.size(); i++){
        Territory currTerritory = allObjTerritories[i];
        vector<string> temptAdjTerritories = currTerritory.getAdjTerritories();
        string s = currTerritory.getTerritoryName();
        int row = i;
        int col;

        //cout << s << endl;

        for(int j = 0; j<allStringTerritories; j++){
            col = distance(allStringTerritories, find(temptAdjTerritories[j],));
        }
        
    }

    /*()
    // Loop through allTerritories map
    for (const auto& pair1 : allStringTerritories) {
        //Territory currTerritory = pair1.second;
        //string currTerritoryName = currTerritory.getTerritoryName();
        string currTerritoryName = pair1;


        cout << currTerritoryName << endl;

        // Find the row index for the current territory
        int row = distance(allStringTerritories.begin(), allStringTerritories.find(currTerritoryName));

        // Loop through adjacent territories
        for (const string& adjacent : currTerritory.getAdjTerritories()) {
            // Find the column index for the adjacent territory
            int col = distance(allTerritories.begin(), allTerritories.find(adjacent));

            // Update the adjacency matrix
            adjacencyMatrix[row][col] = 1;
            adjacencyMatrix[col][row] = 1; // Assuming the graph is undirected
        }
    }
    */
    //setting the value of adjacencyMatrix to tempAdjacencyMatrix
    //adjacencyMatrix = tempAdjacencyMatrix;
}
C++ 向量 索引 迭代 邻接矩阵

评论

0赞 kiner_shah 10/5/2023
它有哪些领域?此函数的预期输出应该是多少?你想解决什么问题?Territory

答: 暂无答案