当前位置: 首页 > wzjs >正文

物流网站首页设计西安网络seo公司

物流网站首页设计,西安网络seo公司,重庆新闻奖,从色彩度讨论如何建设一个网站.本专栏持续输出数据结构题目集,欢迎订阅。 文章目录题目代码题目 请编写程序,根据给定的权重值序列,构建哈夫曼树,并计算带权路径长度。 输入格式: 输入首先给出一个不超 20 的正整数 n,随后一行给出 n 个…

本专栏持续输出数据结构题目集,欢迎订阅。

文章目录

    • 题目
    • 代码

题目

请编写程序,根据给定的权重值序列,构建哈夫曼树,并计算带权路径长度。

输入格式:
输入首先给出一个不超 20 的正整数 n,随后一行给出 n 个权重值。其中权重值都是不超过 100 的正整数。

输出格式:
在一行中输出哈夫曼树的带权路径长度。

输入样例:
5
1 2 3 4 5

输出样例:
33

代码

#include <stdio.h>
#include <stdlib.h>typedef struct HuffmanNode {int weight;struct HuffmanNode *left, *right;
} HuffmanNode;typedef struct {HuffmanNode **array;int size;int capacity;
} MinHeap;// 创建新节点
HuffmanNode* newNode(int weight) {HuffmanNode* node = (HuffmanNode*)malloc(sizeof(HuffmanNode));node->weight = weight;node->left = node->right = NULL;return node;
}// 创建最小堆
MinHeap* createMinHeap(int capacity) {MinHeap* minHeap = (MinHeap*)malloc(sizeof(MinHeap));minHeap->size = 0;minHeap->capacity = capacity;minHeap->array = (HuffmanNode**)malloc(capacity * sizeof(HuffmanNode*));return minHeap;
}// 交换两个节点
void swapHuffmanNode(HuffmanNode** a, HuffmanNode** b) {HuffmanNode* t = *a;*a = *b;*b = t;
}// 最小堆化
void minHeapify(MinHeap* minHeap, int idx) {int smallest = idx;int left = 2 * idx + 1;int right = 2 * idx + 2;if (left < minHeap->size && minHeap->array[left]->weight < minHeap->array[smallest]->weight)smallest = left;if (right < minHeap->size && minHeap->array[right]->weight < minHeap->array[smallest]->weight)smallest = right;if (smallest != idx) {swapHuffmanNode(&minHeap->array[smallest], &minHeap->array[idx]);minHeapify(minHeap, smallest);}
}// 判断堆的大小是否为1
int isSizeOne(MinHeap* minHeap) {return minHeap->size == 1;
}// 提取最小值
HuffmanNode* extractMin(MinHeap* minHeap) {HuffmanNode* temp = minHeap->array[0];minHeap->array[0] = minHeap->array[minHeap->size - 1];--minHeap->size;minHeapify(minHeap, 0);return temp;
}// 插入新节点
void insertMinHeap(MinHeap* minHeap, HuffmanNode* node) {++minHeap->size;int i = minHeap->size - 1;while (i && node->weight < minHeap->array[(i - 1) / 2]->weight) {minHeap->array[i] = minHeap->array[(i - 1) / 2];i = (i - 1) / 2;}minHeap->array[i] = node;
}// 构建最小堆
void buildMinHeap(MinHeap* minHeap) {int n = minHeap->size - 1;int i;for (i = (n - 1) / 2; i >= 0; --i)minHeapify(minHeap, i);
}// 判断是否是叶子节点
int isLeaf(HuffmanNode* root) {return !(root->left) && !(root->right);
}// 创建并构建最小堆
MinHeap* createAndBuildMinHeap(int weights[], int size) {MinHeap* minHeap = createMinHeap(size);for (int i = 0; i < size; ++i)minHeap->array[i] = newNode(weights[i]);minHeap->size = size;buildMinHeap(minHeap);return minHeap;
}// 构建哈夫曼树
HuffmanNode* buildHuffmanTree(int weights[], int size) {HuffmanNode *left, *right, *top;MinHeap* minHeap = createAndBuildMinHeap(weights, size);while (!isSizeOne(minHeap)) {left = extractMin(minHeap);right = extractMin(minHeap);top = newNode(left->weight + right->weight);top->left = left;top->right = right;insertMinHeap(minHeap, top);}return extractMin(minHeap);
}// 计算带权路径长度
int calculateWPL(HuffmanNode* root, int depth) {if (root == NULL) return 0;if (isLeaf(root)) return root->weight * depth;return calculateWPL(root->left, depth + 1) + calculateWPL(root->right, depth + 1);
}int main() {int n;scanf("%d", &n);int weights[20];for (int i = 0; i < n; i++) {scanf("%d", &weights[i]);}HuffmanNode* root = buildHuffmanTree(weights, n);int wpl = calculateWPL(root, 0);printf("%d\n", wpl);return 0;
}
http://www.dtcms.com/wzjs/136425.html

相关文章:

  • 网站的缺点有哪些360搜索引擎入口
  • 康定网站建设工作室百度下载并安装到桌面
  • 芯港小镇建设管理中心网站网络营销心得体会
  • 国内如何做国外网站的兼职项目网站优化seo教程
  • 做糕点的网站百度推广个人能开户吗
  • 大连网站建设佳熙科技公司推广网站的四种方法
  • 企业邮箱申请免费深圳龙岗区优化防控措施
  • 上那个网站找手工活做在百度上怎么打广告
  • 牛商网做的包装盒网站网站搭建平台
  • 衡阳做网站免费的html网站
  • 网站源码怎么用百度推广竞价
  • 淘宝客导购网站建设?五八精准恶意点击软件
  • 厦门建设网站哪家好网站运营工作内容
  • 鞋子网站建设规划书网上广告怎么推广
  • wordpress外观选单分类添加不seo网站推广目的
  • 技术支持 淄博网站建设百度一下百度首页登录
  • 自己做网站怎么推广什么是百度竞价排名服务
  • 厦门网站建设公司排行榜淘宝产品关键词排名查询
  • 沈阳网站建设培训学校网站建设服务公司
  • 做环氧地坪工程网站跨境电商培训机构哪个靠谱
  • 温州网站设计制作课程百度权重排名
  • 商场网站建设开发做一个网站需要多少钱
  • 做微信的微网站快速提高排名
  • 企业做产品网站费用大概是多少蜜雪冰城推广软文
  • 如何查看网站流量google搜索引擎入口 镜像
  • 虚拟主机怎么做网站交换友情链接的意义是什么
  • 电子商务网站建设投资预算新品上市的营销方案
  • seo做的比较好的网站的几个特征百度云搜索引擎入口盘多多
  • 成都网页设计的网站建设谷歌推广代理商
  • 做网站运营怎么样百度排名查询