gpt4 book ai didi

c - 修复 C 中的堆属性数据结构

转载 作者:行者123 更新时间:2023-11-30 18:39:43 24 4
gpt4 key购买 nike

我正在尝试编写一个恢复堆属性的函数。但我总是得到不好的结果。

void fixHeap(int heapSize, struct Edge* edgeArray, int i){//edgeArray is our heap-array.
int leftSon = leftSonIndex(i);
int rightSon = rightSonIndex(i);
int change;
if((leftSon <= heapSize) && (edgeArray[i].cost < edgeArray[leftSon].cost)){
change = leftSon;
}else{
change = i;
if((rightSon <= heapSize) && (edgeArray[change].cost < edgeArray[rightSon].cost)){
change = rightSon;
}
}

if(change != i){
swap(edgeArray, i, change);
i = change;

fixHeap(heapSize, edgeArray, i);
}

}

最佳答案

问题是,如果您选择 leftSon 作为第一个 if block 中的 change,那么您不会将其与rightSon 检查 rightSon > leftSon
因此,在这种情况下,您的示例将失败 -:

  5
/ \
6 7

事情应该是这样的-:

void fixHeap( int heapSize, struct Edge* edgeArray, int i ) //edgeArray is our heap-array.
{
int leftSon = leftSonIndex( i );
int rightSon = rightSonIndex( i );
int change = i;

if ( ( leftSon <= heapSize ) && ( edgeArray[change].cost < edgeArray[leftSon].cost ) )
{
change = leftSon;
}
if ( ( rightSon <= heapSize ) && ( edgeArray[change].cost < edgeArray[rightSon].cost ) )
{
change = rightSon;
}
if ( change != i )
{
swap( edgeArray, i, change );
fixHeap( heapSize, edgeArray, change );
}
}

关于c - 修复 C 中的堆属性数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28787620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com