我已经在C中实现了一个最小堆。更改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,但它不起作用,因为我更改的元素可能不是根(0)的直接子元素。如果我这样做
heapify(h,i,h->size);
这也不起作用,因为可能没有任何孩子对我。
有没有其他办法解决这个问题?
谢谢。它的工作 – 2014-12-07 09:23:18