2013-05-08 2 views
0

Я новичок в C++, и я работал над векторами, а не только на 2D-векторах. Я много занимался, но данные в Интернете очень специфичны для 2D-векторов. Мне нужно построить граф, заданный входным файлом, а затем применить алгоритм Крускала для минимального связующего дерева.Реализация смежной матрицы с 2D-векторами C++

Мой подход:

A1, A2, A3.....An would be the first row and col of my 2d Vectors and they will 
contain name. I will read the input file and start matching the names. 
And then at graph[i][j] I will put the weight. 

    A1 A2 A3...... 

A1 w w w ....... 
A2 w w w ....... 
A3 w w w ....... 

. . . . Теперь я пытаюсь что-то вроде этого:

struct mat{ 
     string name; 
} 

int main(){ 
vector<vector<mat>> matrix; 
// In order to insert 
vector<mat> tempVec; 
tempVec[0].name = "stack"; 
matrix.push_back(tempVec); 
} 

Теперь я понятия не имею, что, когда я tempVec[0].name, 0 указывает, какая строка или седловины из Матрицы. Если он указывает строку, то как узнать, к какому столбцу обращаются. Я имею в виду vector.push_back(tempVec), присваивает данные позиции в моей матрице. Я знаю, что могу получить доступ к отдельным элементам, таким как Matrix [i] [j]. Но как я могу назначить вес определенной строке, позиции столбца, а затем получить доступ к ней.

Как вы думаете, будет ли это хорошей реализацией для метода Крускала.

Просьба быть проста в вашем коде и пояснять. И спасибо заранее.

+0

уверен, что это не матрица.push_back (tempVec); ? –

+0

См. Http://stackoverflow.com/questions/5493474/graph-implementation-c – Bull

+0

@ user2151446 Я хочу сделать это с помощью 2d векторов. Я думаю, это будет намного проще. –

ответ

0

Использование vector<vector<T>> - довольно субоптимальный способ представления матриц, хотя он часто используется. Было бы лучше сделать одномерный vector<T> строк размера x cols. Вы можете индексироваться следующим образом (если следовать C-стиль ряд основных заказов):

vector<mat> matrix(rows*cols); 
... 
element_ij=matrix[i*cols+j]; 

В текущем коде, вы никогда не вставляйте ничего в матрицу:

vector<vector<mat>> matrix; 
// In order to insert 
vector<mat> tempVec; 
tempVec[0].name = "stack"; 
vector.push_back(tempVec); 

Я предполагаю, что последнюю строку должен быть matrix.push_back(tempVec);.

+0

Я сделал изменение, которое должно было быть matrix.push_back ..... Итак, как вы думаете, теперь это будет представлять собой 2D-матрицу. –

+0

Это, безусловно, * * * способ представления 2D-матрицы. –

+0

Итак, как узнать, к какой строке и столбцу обращаются. Это мой настоящий вопрос. –

Смежные вопросы