基础实验4-2.7 修理牧场
题目
农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L i
个长度单位,于是他购买了一条很长的、能锯成N块的木头,即该木头的长度是L i的总和。但是农夫自己没有锯子,请人锯木的酬金跟这段木头的长度成正比。为简单起见,不妨就设酬金等于所锯木头的长度。例如,要将长度为20的木头锯成长度为8、7和5的三段,第一次锯木头花费20,将木头锯成12和8;第二次锯木头花费12,将长度为12的木头锯成7和5,总花费为32。如果第一次将木头锯成15和5,则第二次锯木头花费15,总花费为35(大于32)。
请编写程序帮助农夫计算将木头锯成N块的最少花费
分析
*通过读题可知,此题大意就是要创建一个Huffman树,然后求它的最短带权路径长度(WPL)。
思路
本题实验思路其实很简单,就是循环找数组中两个最小的点创建树,取到最小节点后要将其置空(就是以后不再扫描此节点,表示数组此处已经为空),节点数组处是否为空我用了一个flag[ ]数组进行标记,如果为1则表示节点数组处此值可用,反之则已经为空。
代码
#include<stdio.h>
#include<stdlib.h>
#define N 100
#define Max 51
typedef struct Tree{int data;struct Tree *lchild,*rchild;
}*BiTree,tree;
BiTree CreatHuffman();
int findMin();
void PreSearch(BiTree TT,int level);BiTree T[N],root;
int n,flag[N],count=0;
void main(){int i;BiTree s;scanf("%d",&n);for(i=0;i<n;i++){s=(BiTree)malloc(sizeof(tree));scanf("%d",& s->data);s->lchild=NULL;s->rchild=NULL;T[i]=s;flag[i]=1;}root=CreatHuffman();printf("HuffmanTree PreSearch\n");PreSearch(root,0);printf("\n");printf("总花费=%d ",count);system("pause");
}BiTree CreatHuffman(){//创建一棵Huffman树int min1,min2,i;BiTree TT;while(1){//循环找到数组中最小的两个点min1=findMin();min2=findMin();if(min2==-1){//用于判断数组中是不是只剩余一个节点可用,若是则此节点就是根节点return T[min1];}TT=(BiTree)malloc(sizeof(tree)); //以最小两节点为叶子节点共同构建一个父节点,创建一棵树TT->data=T[min1]->data+T[min2]->data;TT->lchild=T[min1];TT->rchild=T[min2];T[min1]=TT;flag[min1]=1;//插入一个数后,此处别忘了置1,代表新加入节点参与最小值的检索}return NULL;
}int findMin(){int i,min=Max,index=-1;for(i=0;i<n;i++){if(flag[i]==1 && T[i]->data<min){min=T[i]->data;index=i;}}if(index != -1){flag[index]=0;return index;}elsereturn -1;
}void PreSearch(BiTree TT,int level){if(!TT)return;printf("%d ",TT->data);if(!TT->lchild && !TT->rchild)count+=TT->data * level;PreSearch(TT->lchild,level+1);PreSearch(TT->rchild,level+1);
}
基础实验4-2.7 修理牧场相关推荐
- 数据结构PTA习题:基础实验4-2.7 修理牧场 (25分)
基础实验4-2.7 修理牧场 (25分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L ...
- 【两种方法】基础实验4-2.7 修理牧场 (25 分)
立志用最少的代码做最高效的表达 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li的总和. 但 ...
- 7-29 修理牧场 (25分)(PTA实验题)
7-29 修理牧场 (25分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li 个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li ...
- 7-1 修理牧场 (25 分)(最详解)(最容易理解的解题过程)
7-1 修理牧场 (25 分)(最详解)(最容易理解的解题过程) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的.能锯成N块的 ...
- [nRF51822] 8、基础实验代码解析大全 · 实验11 - PPI
前一篇分析了前十个基础实验的代码,从这里开始分析后十个~ 一.PPI原理: PPI(Programmable Peripheral Interconnect),中文翻译为可编程外设互连. 在nRF51 ...
- 计算机应用基础实验报告册,计算机应用基础实验报告(flash)
实 验 报 告 计算机应用基础实验报告 姓名 班级 学号 实验日期 课程名称 计算机应用基础 指导教师 成绩 实验名称:简单动画制作 实验目的: 掌握逐帧动画.形状渐变动画.运动渐变动画的制作方法 实 ...
- Grove Beginner Kits基础实验 Arduino
简 介: 本文就Arduino的基础实验以及与ESP8266连接进行了初步实验.并基于此,给出了基于人脸识别只能门锁系统的硬件设计. 关键词: Arduino,ESP8266 §01 Arduino ...
- ESP8266的一些MicroPython基础实验
文章目录 ▌ESP8266模块 1.模块基本信息 2.模块管脚配置 ▌02 基础实验 1.测试GPIO (1)ON_OFF实验 (2)端口中断 2.测试PWM 3.测试ADC (1)基础的ADC (2 ...
- 计算机网络基础实验简答题,计算机网络基础实验报告.doc
计算机网络基础实验报告 计算机科学与技术系 实 验 报 告专业名称课程名称计算机网络基础项目名称局域网组网实验班 级学 号姓 名同组人员实验日期实验目的与要求: (一).实验目的: 通过组建局域网,了 ...
最新文章
- win8系统服务器地址怎么查,win8服务器地址怎么查
- 1. CMake 系列 - 从零构建动态库和静态库
- rmi 反序列化漏洞_IDEA动态调试(二)——反序列化漏洞(Fastjson)
- 动态规划总结与题目分类
- bailian 2754八皇后
- linux ruby gem 安装目录,linux 安装 gem
- 在Netbeans下配置Tomcat manager用户名与密码
- Morpheus:虚拟现实的新杀器
- C# Invoke 使用 异步委托
- 四万字Hive调优全方位指南(推荐收藏)
- Python 网络爬虫与数据采集(一)
- Java常量池与方法区
- Python基础 模块化编程(模块的导入)
- 【源码汇总】基于RGB-D相机的三维重建总览 包括静态与动态三维重建
- centos安装git时出错提示make[1]: *** [perl.mak] Error 2
- android自动夜间模式,Android实现日夜间模式的深入理解
- mysql朋友圈数据库设计_实现微信朋友圈可见不可见的数据库设计及ORM语句
- 坐南京13路公交车,体验《头文字D》感觉!
- 基于机器学习的锂离子电池健康状态预测:进展与展望
- B-样条基函数:定义 (B-spline Basis Functions: Definition)
热门文章
- 添加完商品后,点货品显示此商品不存在规格,请为其添加规格?
- Js 跟手转动的罗盘指针
- 900句--熟背后交流无障碍
- 从龟速 11s 到闪电 1s,详解前端性能优化之首屏加载
- 【数学建模】多元线性回归(PythonMatlab代码实现)
- 关于zip包解压之后文件打开出现文件损坏的问题
- 小白学机器学习西瓜书-第三章对数几率回归
- 最全的盲埋孔板工艺介绍与设计原则​​​​​​​
- java jfreechart 折线图_java程序使用JfreeChart画折线图
- js下载文件方法记录