使用Prims算法从邻接矩阵创建最小生成树

时间:2013-11-21 05:26:26

标签: c++ algorithm data-structures

我想实现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;  
    }
}

}

0 个答案:

没有答案