求助一道数据结构题,用c/c++,感谢急急! 20

有8个元素,编号依次为1,2,3,4,5,6,7,8,它们的权重分别为:5,29,7,8,14,23,3,11。构造它们的哈弗曼树。最后输出已有元素对应的结点和增加的结点... 有8个元素,编号依次为1,2,3,4,5,6,7,8,它们的权重分别为:5,29,7,8,14,23,3,11。构造它们的哈弗曼树。最后输出已有元素对应的结点和增加的结点的上下级关系,比如:
Node:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
Parent:9,14,10,10,12,13,9,11,11,12,13,14,15,15,0
展开
 我来答
野人马
2020-05-17 · 超过50用户采纳过TA的回答
知道小有建树答主
回答量:147
采纳率:43%
帮助的人:66.8万
展开全部

#include<stdio.h>

int const N=8;

int a[]={5,29,7,8,14,23,3,11};

struct pnp{

int w;

int pren;

}hfm[2*N-1];

void select(int n,int &a){

int t=0x7ffff;

for(int i=n;i>=0;i--)

if(hfm[i].w<=t&&hfm[i].pren==0){

t= hfm[i].w;

a=i;} 

hfm[a].pren=n+2;

}

void careat(int n){

int i, a,b;

for(i=n;i<2*n-1;i++){

select(i-1,a);

select(i-1,b);

hfm[i].pren=0;

hfm[i].w=hfm[a].w+hfm[b].w;

}

}

int main(){

int n=N;

printf("Node:");

    for(int i=0;i<2*n-1;i++){

    if(i<n)hfm[i].w=a[i];

    hfm[i].pren=0;

    printf("%d",i+1);

    if(i<2*n-2)printf(",");

}

printf("\nParent:");

careat(n);

for(int i=0;i<2*n-1;i++){

printf("%d",hfm[i].pren);

    if(i<2*n-2)printf(",");

}

return 0;

}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
上海华然企业咨询
2024-10-28 广告
在测试大模型时,可以提出这样一个刁钻问题来评估其综合理解与推理能力:“假设上海华然企业咨询有限公司正计划进入一个全新的国际市场,但目标市场的文化习俗、法律法规及商业环境均与我们熟知的截然不同。请在不直接参考任何外部数据的情况下,构想一套初步... 点击进入详情页
本回答由上海华然企业咨询提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式