提问人:osiris 提问时间:10/5/2023 最后编辑:kiner_shahosiris 更新时间:10/5/2023 访问量:46
使用向量创建邻接矩阵
Creating an Adjacency Matrix with Vectors
问:
我在想出一种算法来创建邻接矩阵时遇到了麻烦。现在我觉得我正在走上一条非常复杂的道路,我想知道是否有更好的选择?我目前的算法旨在按如下方式工作:我有一个名为 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;
}
答: 暂无答案
评论
Territory