1、=0;p+) /统计各种字符的个数 if(*pA&*p*s for(i=1,j=0; if(tempi!=0) j+; /j保存字符的个数 strj=i+64; /送对应的字母到数组str中 cntj=tempi; /存入对应字母的权值到数组cnt中%c,权值=%dn,strj,cntj); strj=i+47; strj=i+96; return j;void ChuffmanTree(HuffmanTree HT,HuffmanCode HC,int cnt,char str) /构造哈夫曼树 int i,s1,s2;=2*num-1; /初始化HT HTi.lchild=0; HTi.r
2、child=0; HTi.parent=0; HTi.weight=0;=num; /输入num个叶节点的权值 HTi.weight=cnti; for(i=num+1; /在HT1.i-1中选择parent为0且权值最小的两个根节点 /其序号分别为s1和s2,并依次生成新节点 select(HT,i-1,s1,s2); HTs1.parent=i; HTs2.parent=i; HTi.lchild=s1; HTi.rchild=s2; HTi.weight=HTs1.weight+HTs2.weight; /输入字符集中的字符 HCi.ch=stri; printf(nn while(i0
3、) /直至上溯到HTc是树根为止 /若Tc是Tp的左孩子,则生成0,否则生成代码1 cd-start=(HTp.lchild=c)?: c=p; strcpy(HCi.bits,&cdstart); HCi.len=num-start;%c: %sn,HCi.ch,HCi.bits);void coding(HuffmanCode HC,char *str) /对str所代表的字符串进行编码,并写入文件 FILE *fp; fp=fopen(codefile.txt,wnn输入的字符文件编码为: while(*str) if(HCi.ch=*str) for(j=0;j fputc(HCi.b
4、itsj,fp);,HCi.bitsj); break; str+;fclose(fp);char * decode(HuffmanCode HC) /代码文件codefile.txt的译码 char str254; /假设原文本文件不超过254个字符 static char cdn+1; int i,j,k=0,cjs;r while(!feof(fp) cjs=0; for(i=0;i cdi= cdi+1= cdi=fgetc(fp); for(j=1;jj+) if(strcmp(HCj.bits,cd)=0) strk=HCj.ch; k+; cjs=1; strk= p=str;
5、return p;void main() char st254,*s,str27; int i; int cn27; HuffmanTree HT; HuffmanCode HC;输入需要编码的字符串(假设均为大写字母或者均为数字): gets(st); /将字符串存入到st里面sti! /if(sti / printf(请保证输入的字符都是大写字母! /exit(0); / else num=jsq(st,cn,str); /统计字符的种类以及各字符出现的频率 /ChuffmanTree(HT,HC,cn,str); /建立哈夫曼树nn字符对应的哈夫曼编码为: HuffmanEncoding
6、(HT,HC); coding(HC,st); /建立电文哈弗曼编码文件 s=decode(HC); /读编码文件译码nn译码后的字符串:%snn /输出译码后的字符串Dijkstra算法应用交通咨询系统#include stdafx.h#include string.h#define MVNum 50 #define Dij_MAXN 33 #define MAX_VERTEX_NUM 31 #define MAX_STRING_NUM 10 #define MAX_TRAFFIC_NUM 10typedef struct TrafficNode char nameMAX_STRING_NU
7、M; int Time;/ int EndCity /火车到达城市的编号 int Cost;/票价 TrafficNodeDat;typedef struct VNode CityType city; /城市编号 int TrainNum; /标记下面Train数组里元素个数 TrafficNodeDat TrainMAX_TRAFFIC_NUM; /数组成员为结构体,记录了到达城市、起止时间、票价和班次 VNodeDat; /班次 int EndCity; /火车到达城市的编号 /票价 int FlightNum; /标记下面Train数组和Flight数组里元素个数 TrafficNode
8、Dat FlightMAX_TRAFFIC_NUM;int main()switch(Command) case 0: return 0; case 1: Administrators();/管理员操作界面函数 break; case 2: User();/用户操作界面函数 default: cout0&(min0|sijmin) pre=i;pos=j;/j为起始站中花费最小的到达站的城市编号 min=sij; PreCitypos=pre; Dijkstra_Output(s,PreCity,p_end,TravelType);int CalcMinCost(int StartCity,i
9、nt EndCity,int TravelType) /查询最小耗费路线 int s3030; int i,j,min,end,flag1,flag2; flag1=0;flag2=0; for(j=0; sij=-1;/设空路径 if(TravelType=0)/判断初始城市和终点城市是否在火车交通路线中 for(i=0; if(AdjListi.Trainj.EndCity=StartCity) flag1=1; if(AdjListi.Trainj.EndCity=EndCity) flag2=1; else if(TravelType=1)/判断初始和终点城市是否在飞机交通路线中 for(i=0; for(j=0; if(AdjListi.Flightj.EndCity=StartCity) flag1=1; if(AdjListi.Flightj.EndCity=EndCity) flag2=1; if(flag1!=1&flag2!=1) printf(nt抱歉!没有您要查找的路线!return 0; if(TravelType=0) for(i=0;City
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1