使用优先队列的 Prim 算法

问题描述

新来的,需要你的帮助。我们被要求为 Prim 的算法使用优先队列和堆,但我被卡住了。我知道是 shiftUp() 函数搞砸了,导致程序的纸牌房子比可口可乐的价格下降得更快,但我无法解决这个问题。 这是我的代码:

 #include <stdio.h>
#define MAX 10000
typedef struct priority
{
    int edge_1st;
    int edge_2nd;
    int arr[MAX];

}pq;
pq ptr;
int insert(int);
int counter[MAX],size,cost;
void primoperate();
int extract();
int shiftUp(int);
int shiftDown(int);
int parent(int);
int leftChild(int);
int rightChild(int);
int main()
{
    int limit,add,input,j;
    printf("Enter the number of elements you want to enter");
    scanf("%d",&limit);
    for (int i=0;i<limit;i++)
    {
        printf("1st edge connected");
        scanf("%d",&ptr.edge_1st);
        printf("2nd edge connected");
        scanf("%d",&ptr.edge_2nd);
        printf("Weight of the edge");
        scanf("%d",&input);
        insert(input);
    }
    while(j<=size)
    {
        if ((counter[ptr.edge_1st]||counter[ptr.edge_2nd])!=1)
        {
            add=extract();
            printf("%d",add);
            cost+=add;
            counter[ptr.edge_1st]=counter[ptr.edge_2nd]=1;
        }
        j++;
    }
    printf("The total cost incurred after adding the weights is %d",cost);
}
int insert(int input)
{
    size+=1;
    ptr.arr[size]=input;
    shiftUp(size);
    printf("Added %d to the priority queue",input);
    return 0;
}
int shiftUp(int i)
{
    int temporary;
    while(i>0 && ptr.arr[parent(i)]>ptr.arr[i])
    {
        temporary=ptr.arr[parent(i)];
        ptr.arr[parent(i)]=ptr.arr[i];
        ptr.arr[i]=temporary;
        i=parent(i);
        }   
}
int parent(int i)
{
    return(i-1)/2;
}
int leftChild(int i)
{
    return ((2*i)+1);
}
int rightChild(int i)
{
    return ((2*i)+2);
}
int extract()
{
    int result=ptr.arr[0];
    printf("The topmost element in the priority queue at present is: %d",result);
    ptr.arr[0]=ptr.arr[size];
    shiftDown(0);
    return result;  
}
int shiftDown(int i)
{
    int temp=0;
    int minIndex=i;
    int left=leftChild(i);
    if(left<=size && ptr.arr[left]<ptr.arr[minIndex])
    {
        minIndex=left;
    }
    int right=rightChild(i);
    if (right <= size && ptr.arr[right] < ptr.arr[minIndex]) 
    {
        minIndex=right;
    }
    if (i != minIndex) 
    {
        temp=ptr.arr[i];
        ptr.arr[i]=ptr.arr[minIndex];
        ptr.arr[minIndex]=temp;
        shiftDown(minIndex);
    }
    
}

我知道这很糟糕,不符合你的标准等等,但对于我的任务,我非常需要你的帮助!提前致谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...