如何将矩阵转换为未加权的图形或树?

时间:2017-03-21 02:00:50

标签: c++ matrix graph tree

我有一个名为array [] []的矩阵,其宽度和高度尺寸相等。它包含的数据如下所示

        #1    #2     #3       #4     #5    #6        #7   #8
    #1   0    100    -1       10     -1    -1        -1   100
    #2  100     0    -1       -1     10    10        -1    -1
    #3  -1     -1     0     1000    100    -1      1000    -1 
    #4  50     -1   720       -1    -1     -1       -1     -1  
    #5  -1     10   100       -1      0    -1       100    -1
    #6  -1     10    -1       -1     -1     0        50  2000
    #7  -1     -1  1000       -1    100    10         0    -1
    #8  100    -1    -1       -1     -1  1000        -1     0

A -1表示没有从#x到#y的路径,正数表示存在。我正在尝试将其转换为图形或树,以便更容易实现最小跃点算法。有没有简单的方法来转换它?

1 个答案:

答案 0 :(得分:0)

非常简单。矩阵中的所有数字代表边缘。宽度/高度是顶点的数量。 假设您的图形是向量或顶点和边的列表。然后以下算法将做(伪代码):

int dimension;
int weights[dimension][dimension]; // input
vector<int> verticies;
vector<Edge> edges; // Edge is a struct with int from, to and weight
for( i = 0 ... dimension) {
    verticies.push_back(i+1);
}

for( row = 0 ... dimension) {
    for( col = 0 ... dimension) {
        weight = weights[row][col];
        if( weight > 0) {
            edges.push_back(Edge(col, row, weight));
        }
    }
}