Для авто l oop заполнить матрицу - PullRequest
0 голосов
/ 04 августа 2020

Я хочу преобразовать список смежности в матрицу смежности

Список смежности выглядит следующим образом:

vector< vector< Arc * > * > _adjacences;

и класс ar c имеет это:

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

Как я могу исправить мой l oop?

1 Ответ

1 голос
/ 04 августа 2020

Поэтому я думаю, что list и listD являются ошибкой, потому что вы разделяете информацию, которая должна оставаться вместе. Вместо этого вы должны построить matrix прямо из _adjacences. Вот так

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, вы можете заполнить их так же, как и сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...