我想把邻接表转换成邻接矩阵
邻接列表如下:
vector< vector< Arc * > * > _adjacences;
arc类有这些:
public:
int sommetArrive; // tops
int longueur; // distance
我有如下3个向量要填充:
std::vector <int> list[_adjacences.size()]; // vector of tops
std::vector <int> >listD[_adjacences.size()]; // vector of distances
std::vector < vector <int> > matrix( _adjacences.size(),
vector<int>(_adjacences.size(),0 )); // matrix init to 0 and to be filled to become adjacenecy matrix
我这样填充向量:
for (unsigned i = 0; i < _adjacences.size(); i++){
for (auto j : *_adjacences[i]){
list[i].push_back(j->sommetArrive);
listD[i].push_back(j->longueur);
}
}
现在我的问题来了:我试着做邻接矩阵,我能做
0 0 0 0 1 0 1
0 1 0 1 0 1 0
....
通过这样做:
for (unsigned i = 0; i < _adjacences.size(); i++) {
for (auto j : list[i]){
matrix[i][j] = 1;
}
}
我想用顶部之间的距离来做邻接矩阵,而不是1。
我试着这样做:
for (unsigned i = 0; i < _adjacences.size(); i++) {
for (auto j : list[i]){
for (auto k : listD[i]){ // MY ERROR IS SOMEWHERE HERE
matrix[i][j] = k; // IN THIS LOOP
}
}
}
我在同一排中以相同的距离结束
0 0 0 0 35 0 35
0 22 0 22 0 22 0
我该如何修复我的循环?
所以我认为list
和listd
是一个错误,因为您将应该保持在一起的信息分开了。 相反,您应该直接从_邻接
构造矩阵
。 像这样
vector< vector< Arc * > * > _adjacences = ...;
std::vector<vector<int>> matrix(_adjacences.size(), vector<int>(_adjacences.size()));
for (unsigned i = 0; i < _adjacences.size(); i++) {
for (auto j : *_adjacences[i]) {
matrix[i][j->sommetArrive] = j->longueur;
}
}
如果您想要list
和listd
以及matrix
,那么您可以用与现在相同的方式填充它们。