我有一个名为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的路径,正数表示存在。我正在尝试将其转换为图形或树,以便更容易实现最小跃点算法。有没有简单的方法来转换它?
答案 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));
}
}
}