Chinaunix首页 | 论坛 | 博客
  • 博客访问: 527190
  • 博文数量: 2
  • 博客积分: 7982
  • 博客等级: 少将
  • 技术积分: 1280
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-20 11:18
文章分类
文章存档

2011年(1)

2009年(1)

我的朋友
博文列表
标题:
标题 阅读 评论 转发 发布日期
     暂时没有公开的博文,给他留言提醒一下吧。
    
给主人留下些什么吧!~~

chinaunix网友2009-04-21 16:49

求助!!!! #include #include #include int m,s1,s2; typedef struct { unsigned int weight; unsigned int parent,lchild,rchild; }HTNode,*HuffmanTree; //动态分配数组存储哈夫曼树 typedef char *HuffmanCode; //动态分配数组存储哈夫曼编码表 void Select(HuffmanTree HT,int n) { int i,j; for(i = 1;i <= n;i++) if(!HT[i].parent){s1 = i;break;} for(j = i+1;j <= n;j++) if(!HT[j].parent){s2 = j;break;} for(i = 1;i <= n;i++) if((HT[s1].weight>HT[i].weight)&&(!HT[i].parent)&&(s2!=i))s1=i; for(j = 1;j <= n;j++) if((HT[s2].weight>HT[j].weight)&&(!HT[j].parent)&&(s1!=j))s2=j; } void HuffmanCoding(HuffmanTree HT, HuffmanCode HC[], int *w, int n) { // w存放n个字符的权值(均>0),构造哈夫曼树HT, // 并求出n个字符的哈夫曼编码HC int i, j; char *cd; int p; int cdlen; if (n<=1) return; m = 2 * n - 1; HT = (HuffmanTree)malloc((m+1) * sizeof(HTNode)); // 0号单元未用 for (i=1; i<=n; i++) { //初始化 HT[i].weight=w[i-1]; HT[i].parent=0; HT[i].lchild=0; HT[i].rchild=0; } for (i=n+1; i<=m; i++) { //初始化 HT[i].weight=0; HT[i].parent=0; HT[i].lchild=0; HT[i].rchild=0; } puts("\n哈夫曼树的构造过程如下所示:"); printf("HT初态:\n 结点 weight parent lchild rchild"); for (i=1; i<=m; i++) printf("\n%4d%8d%8d%8d%8d",i,HT[i].weight, HT[i].parent,HT[i].lchild, HT[i].rchild); printf(" 按任意键,继续 ..."); getchar( ); for (i=n+1; i<=m; i++) { // 建哈夫曼树 // 在HT[1..i-1]中选择parent为0且weight最小的两个结点, // 其序号分别为s1和s2。 Select(HT, i-1); HT[s1].parent = i; HT[s2].parent = i; HT[i].lchild = s1; HT[i].rchild = s2; HT[i].weight = HT[s1].weight + HT[s2].weight; printf("\nselect: s1=%d s2=%d\n", s1, s2); printf(" 结点 weight parent lchild rchild"); for (j=1; j<=i; j++) printf("\n%4d%8d%8d%8d%8d",j,HT[j].weight, HT[j].parent,HT[j].lchild, HT[j].rchild); printf(" 按任意键,继续 ..."); getchar(); } //------无栈非递归遍历哈夫曼树,求哈夫曼编码 cd = (char *)malloc(n*sizeof(char)); // 分配求编码的工作空间 p = m; cdlen = 0; for (i=1; i<=m; ++i) // 遍历哈夫曼树时用作结点状态标志 HT[i].weight = 0; while (p) { if (HT[p].weight==0) { // 向左 HT[p].weight = 1; if (HT[p].lchild != 0) { p = HT[p].lchild; cd[cdlen++] ='0'; } else if (HT[p].rchild == 0) { // 登记叶子结点的字符的编码 HC[p] = (char *)malloc((cdlen+1) * sizeof(char)); cd[cdlen] ='\0'; strcpy(HC[p], cd); // 复制编码(串) } } else if (HT[p].weight==1) { // 向右 HT[p].weight = 2; if (HT[p].rchild != 0) { p = HT[p].rchild; cd[cdlen++] ='1'; } } else { // HT[p].weight==2,退回退到父结点,编码长度减1 HT[p].weight = 0; p = HT[p].parent; --cdlen; } } } // HuffmanCoding void main() { HuffmanTree HT;HuffmanCode *HC;int *w,n,i; puts("输入结点数:"); scanf("%d",&n); HC = (HuffmanCode *)malloc(n*sizeof(HuffmanCode)); w = (int *)malloc(n*sizeof(int)); printf("输入%d个结点的权值\n",n); for(i = 0;i < n;i++) scanf("%d",&w[i]); HuffmanCoding(HT,HC,w,n); puts("\n各结点的哈夫曼编码:"); for(i = 1;i <= n;i++) printf("%2d(%4d):%s\n",i,w[i-1],HC[i]); getchar(); } 这个代码要写个报告,郁闷。可不可以帮忙看哈选作内容 实现提示 测试数据 基本要求 问题描述 这几个问题怎么弄 我的邮箱是wygs2@yahoo.com.cn 谢谢你了

回复 |  删除 |  举报

chinaunix网友2007-10-10 17:43

你好,我想问下对存入数据库中的图片,如何重新读入获取位图的高度和宽度,因为要对里面的图象进行灰度处理和训练,并且要重复读入的话,是不是NEXT语句旧可以了,谢谢,我的邮箱是tubage0421@163.com

回复 |  删除 |  举报

chinaunix网友2007-07-17 10:44

因为格式的问题,有些公式和图无法显示.所以有些材料就没法放上去了,如果有需要的话可以把油箱留下.

回复 |  删除 |  举报

chinaunix网友2007-07-16 16:53

你好,麻烦你把完整的关于图像配准的评论写全,可以吗,如果你能把它发到我的邮箱,在下就更感激不尽了,我的邮箱是:dongdong7828@163.com,谢谢你了!

回复 |  删除 |  举报

chinaunix网友2007-07-16 16:50

你好,为什么网页上不显示有关式子和图哪?

回复 |  删除 |  举报
留言热议
请登录后留言。

登录 注册