| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2457 人关注过本帖
标题:求教这个程序测试时说断点异常
取消只看楼主 加入收藏
qq826647235
Rank: 2
等 级:论坛游民
帖 子:37
专家分:10
注 册:2016-5-4
结帖率:63.64%
收藏
已结贴  问题点数:20 回复次数:5 
求教这个程序测试时说断点异常
求教这个程序测试时说断点异常,哈夫曼编码的题

问题描述描述:


写一个哈夫曼码的编/译码系统,要求能对要传输的报文进行编码和解码。构造哈夫曼树时,权值小的放左子树,权值大的放右子树,编码时右子树编码为1,左子树编码为0.
 


输入:


输入表示字符集大小为n(n <= 100)的正整数,以及n个字符和n个权值(正整数,值越大表示该字符出现的概率越大);
输入串长小于或等于100的目标报文。


输出:


经过编码后的二进制码,占一行;
以及对应解码后的报文,占一行;
最后输出一个回车符。


输入样例:

5 a b c d e 12 40 15 8 25
bbbaddeccbbb




输出样例:

00011111110111010110110000
bbbaddeccbbb


代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Halv
{
    char data;
    int number;
    int mima;
    struct Halv *lchild;
    struct Halv *rchild;
}Bit,*Node;


void solve(Node gen,int m,int n)
{
    gen->mima=10*m+n;
     if(gen->lchild!=NULL)
    {
        solve(gen->lchild,gen->mima,0);
    }

     if(gen->rchild!=NULL)
        solve(gen->rchild,gen->mima,1);
}

void print(Node gen,char a)
{
     int judge=0;
     if(gen->data==a)
     {
         printf("%d",gen->mima);
         judge=1;
     }
     if(gen->lchild!=NULL&&judge!=1)
        print(gen->lchild,a);
     if(gen->rchild!=NULL&&judge!=1)
        print(gen->rchild,a);
}

int main()
{
    char A[100];
    int a,b,c,n,min1,min2;
    Node group[100],p1;
    scanf("%d",&n);
    for(a=0;a<n;a++)
    {
        group[a]=(Node)malloc(sizeof(Bit));
    }
    for(a=0;a<n;a++)
    {
        scanf(" %c",&group[a]->data);
    }
    for(a=0;a<n;a++)
    {
        scanf("%d",&group[a]->number);
        group[a]->lchild=NULL;
        group[a]->rchild=NULL;
    }
    for(a=0;a<n-1;a++)
    {
        for(b=0,c=10000;b<n;b++)
        {
            if(group[b]->number<c)
            {
                min1=b;
                c=group[b]->number;
            }
        }
        for(b=0,c=10000;b<n;b++)
        {
            if(group[b]->number<c&&group[b]->number>group[min1]->number)
            {
                min2=b;
                c=group[b]->number;
            }
        }
        p1=(Node)malloc(sizeof(Bit));
        {
            p1->lchild=group[min1];
            p1->rchild=group[min2];
            p1->number=group[min1]->number+group[min2]->number;
            p1->data='~';
        }
        group[min1]=p1;
        group[min2]->number=10000;
    }
    solve(p1,0,0);
    scanf("%s",A);
    b=strlen(A);
    printf("%d\n",b);
    for(a=0;a<b;a++)
    {
        print(p1,A[a]);
    }
    printf("\n");
    puts(A);
    return 0;
}


[此贴子已经被作者于2016-5-4 22:38编辑过]

搜索更多相关主题的帖子: 二进制 正整数 断点 
2016-05-04 22:24
qq826647235
Rank: 2
等 级:论坛游民
帖 子:37
专家分:10
注 册:2016-5-4
收藏
得分:0 
回复 2楼 未来大仙
描述:


写一个哈夫曼码的编/译码系统,要求能对要传输的报文进行编码和解码。构造哈夫曼树时,权值小的放左子树,权值大的放右子树,编码时右子树编码为1,左子树编码为0.
 


输入:


输入表示字符集大小为n(n <= 100)的正整数,以及n个字符和n个权值(正整数,值越大表示该字符出现的概率越大);
输入串长小于或等于100的目标报文。


输出:


经过编码后的二进制码,占一行;
以及对应解码后的报文,占一行;
最后输出一个回车符。


输入样例:

5 a b c d e 12 40 15 8 25
bbbaddeccbbb




输出样例:

00011111110111010110110000
bbbaddeccbbb

2016-05-04 22:31
qq826647235
Rank: 2
等 级:论坛游民
帖 子:37
专家分:10
注 册:2016-5-4
收藏
得分:0 
回复 2楼 未来大仙
问题就是这样的 = =
2016-05-04 22:31
qq826647235
Rank: 2
等 级:论坛游民
帖 子:37
专家分:10
注 册:2016-5-4
收藏
得分:0 
回复 5楼 未来大仙
额。。就是哈夫曼编码。。这个不好说。。
2016-05-04 22:47
qq826647235
Rank: 2
等 级:论坛游民
帖 子:37
专家分:10
注 册:2016-5-4
收藏
得分:0 
回复 7楼 未来大仙
我重新定义c=10000了。
2016-05-04 23:13
qq826647235
Rank: 2
等 级:论坛游民
帖 子:37
专家分:10
注 册:2016-5-4
收藏
得分:0 
回复 9楼 未来大仙
咳。我知道我哪错了。应该是赋密码那里错了。已经改对了。不过还是谢谢你
2016-05-04 23:52
快速回复:求教这个程序测试时说断点异常
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016639 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved