【问题标题】:matrix filling, but it is skipping an element each row, why? [closed]矩阵填充,但它每行跳过一个元素,为什么? [关闭]
【发布时间】:2020-08-03 23:54:40
【问题描述】:

我有这些向量如下

vector< vector< Arc * > * > _adjacences;
vector <int> list[_adjacences.size()];
vector <int> listD[_adjacences.size()];
vector < vector <int> > matrix( _adjacences.size(), vector<int>(_adjacences.size(),0 ));
vector < vector <int> > shortPath( _adjacences.size(), vector<int>(_adjacences.size(),0 ));

我想将邻接列表制作成邻接矩阵

弧包含这些:

int sommetArrive;
int longueur;
string nom;

我尝试制作两个向量,一个用于距离,另一个用于窥视

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);
     }
}

然后我制作邻接矩阵,这是我做错事的地方

for (int i = 0; i < _adjacences.size(); i++) {
     for (auto j : list[i]){
          for (auto k : listD[i]){
               matrix[i][j] = k;
          }
     }
}

而不是得到这个:

0 0 0 0 0 0 0 0 0 0 0 0 0 120 0 62 
0 0 253 0 0 0 0 0 0 0 204 0 0 0 0 0 
0 53 0 12 0 0 105 0 0 0 0 0 0 0 0 0 
0 0 15 0 38 0 0 108 0 0 0 0 0 0 0 0 
0 0 0 93 0 123 0 0 113 0 0 0 0 0 0 0 
0 0 0 0 158 0 0 0 0 118 0 0 0 0 0 0 
0 0 97 0 0 0 0 17 0 0 0 87 0 0 0 0 
0 0 0 103 0 0 3 0 53 0 0 0 73 0 0 0 
0 0 0 0 153 0 0 33 0 113 0 0 0 0 0 0 
0 0 0 0 0 55 0 0 91 0 0 0 0 72 0 0 

我最终得到了这个

0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 62 
0 0 204 0 0 0 0 0 0 0 204 0 0 0 0 0 
0 105 0 105 0 0 105 0 0 0 0 0 0 0 0 0 
0 0 108 0 108 0 0 108 0 0 0 0 0 0 0 0 
0 0 0 113 0 113 0 0 113 0 0 0 0 0 0 0 
0 0 0 0 118 0 0 0 0 118 0 0 0 0 0 0 
0 0 87 0 0 0 0 87 0 0 0 87 0 0 0 0 
0 0 0 73 0 0 73 0 73 0 0 0 73 0 0 0 
0 0 0 0 113 0 0 113 0 113 0 0 0 0 0 0 
0 0 0 0 0 72 0 0 72 0 0 0 0 72 0 0 

重复相同的数字而不是传递给下一个元素 k

我做错了什么?

【问题讨论】:

标签: c++ matrix vector


【解决方案1】:

请注意,对于每个i,您都使用相同的列表listD[i]。内循环:

for (auto k : listD[i]){
    matrix[i][j] = k;
}

会将listD[i] 中的所有值一一分配给matrix[i][j],直到保留最终值。这和写matrix[i][j] = listD[i].back()是一样的。

您可能需要将内部循环替换为matrix[i][j] = listD[i][j]

【讨论】:

  • 是的,那是我做错了,但我不能让 listD[i][j] 工作,因为它是一维向量
  • 是二维数据结构。只是不是很清楚。将vector &lt;int&gt; listD[_adjacences.size()] 替换为std::vector&lt;std::vector&lt;int&gt; &gt; listD(_adjacences.size())
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-30
  • 1970-01-01
  • 2012-02-24
  • 2022-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多