【发布时间】:2015-02-05 02:22:06
【问题描述】:
我在 C 中实现了一个最小堆。
我的堆是一个结构数组。我根据结构中成员“长度”的值排列了堆中的元素。在我的程序中,我必须动态修改某些成员的“长度”。修改这个值后,我的堆已经重建。我在重建其中的一部分时遇到了困难。
我的代码:
typedef struct edge{
int source;
int dest;
int length;
}edge_st;
typedef struct heap{
edge_st* edge[100];
int size;
}heap;
重新调整的代码如下所示:
void modifyHeap(heap* h, int ref, int newval)
{
int i;
for(i=0; i<h->size; i++)
{
if(h->edge[i]->source == ref)
{
if(h->edge[i]->length==INT_MAX)
{
h->edge[i]->length = 0;
}
h->edge[i]->length = h->edge[i]->length+newval;
break;
}
}
heapify(h,0,h->size);
}
我正在做的是使用引用搜索结构并更改其长度值。 更改后,我尝试再次进行 heapify,但它不起作用,因为我更改的元素可能不是 root(0) 的直接子元素。如果我这样做了
heapify(h,i,h->size);
这也不起作用,因为 i 可能没有任何孩子。
有没有其他办法解决这个问题?
【问题讨论】:
标签: c data-structures heap shortest-path