我想实现Prims算法来查找图的最小生成树。我已经写了一些代码,从我认为的方法开始,但我有点坚持如何完成它。
现在,我有一个存储在matrix [i] [j]中的矩阵,它存储为vector>。我还有一个存储在变量ip中的IP地址列表。 (这将成为图表中每列/行的标签)
int n = 0;
for(int i = 0; i<ip.size();i++) // column
{
for(int j = ip.size()-1; j>n;j--)
{
if(matrix[i][j] > 0)
{
edgef test;
test.ip1 = ip[i];
test.ip2 = ip[j];
test.w = matrix[i][j];
add(test);
}
}
n++;
}
目前,此代码将查看一列,并将与该列关联的所有权重添加到二进制最小堆中。我想要做的是,将一个项目从堆中出列并将其存储在某处(如果它是最小边缘权重)。
void entry::add(edgef x)
{
int current, temp;
current = heap.size();
heap.push_back(x);
if(heap.size() > 1)
{
while(heap[current].w < heap[current/2].w) // if child is less than parent, min heap style
{
edgef temp = heap[current/2]; // swap
heap[current/2] = heap[current];
heap[current] = temp;
current = current/2;
}
}
}