【发布时间】:2020-08-04 12:50:00
【问题描述】:
我想将邻接表转换为邻接矩阵
邻接表如下:
vector< vector< Arc * > * > _adjacences;
类弧有这些:
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
如何修复我的循环?
【问题讨论】:
-
如果我正常声明,我会得到:
error: request for member ‘push_back’ in ‘list.std::vector<int>::operator[](((std::vector<int>::size_type)i))’, which is of non-class type ‘__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type’ {aka ‘int’} -
您希望
list成为什么?是一维还是二维?目前你有一个向量数组,这有点奇怪。而且也不是合法的 C++,因为可变长度数组不是合法的 C++。 -
你真的应该考虑重做:
vector< vector< Arc > > _adjacences。更理智。 -
list是来自 _adjacences 的邻接列表,它是一个指针向量,我试图使list成为一个具有整数的向量 -
必须同意,向量、指针和数组的混合确实令人困惑。现在我可以看到 Arc 类的一些内容,我认为根本不需要任何指针。