0

我是 C++ 的初学者,我一直在研究向量,而不是在 2D 向量上。我上网很多,但互联网上的数据与 2D 矢量非常具体。我需要在给定输入文件的情况下构建一个图,然后将 Kruskal 算法应用于最小生成树。

我的做法:

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 表示 Matrix 的哪一行或哪一列。如果它指示行,那么我怎么知道正在访问哪个列。我的意思是vector.push_back(tempVec),将我的矩阵中的哪个位置分配给数据。我知道我可以访问像 Matrix[i][j] 这样的单个元素。但是我怎样才能将权重分配给特定的行、列位置然后访问它。

此外,您认为 Kruskal 方法将是一个很好的实现。

请在您的代码和解释中保持简单。并提前感谢。

4

1 回答 1

0

使用vector<vector<T>>是表示矩阵的一种相当次优的方式,尽管它经常被使用。vector<T>制作大小为 rows 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);.

于 2013-05-08T12:35:21.237 回答