| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 572 人关注过本帖
标题:帮忙看看哈弗曼树
只看楼主 加入收藏
傻瓜爱幻想
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2009-11-24
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
帮忙看看哈弗曼树
#include<stdio.h>
typedef struct{                        //定义结构体用以存储哈弗曼数的结点;
    int weight;
    int parent;
    int lchild;
    int rchild;
    }huffman;
int select(huffman s[],int t,int minx,int miny);       //声明函数;

void main()                                         //主函数开始;
{

    int n,m,i,s1,s2;                                //定义变量;
    huffman ht[100];
    printf("please enter the leaf numbers:");
    scanf("%d",&n);                                //输入叶子结点数;
    m=2*n-1;                                      //计算总的结点数;
   
    for(i=0;i<n;i++)                              //输入个叶子结点的权重;
    {
        scanf("%d",&ht[i].weight);
    }
    for(i=0;i<m;i++)                           //将哈弗曼树的所有结点的父亲和孩子均置零;
    {
        ht[i].parent=0;
        ht[i].lchild=0;
        ht[i].rchild=0;
    }
    for(i=0;i<m;i++)                          //输出初始化后的各结点;
    {
    printf("%d--weight %d--parent %d--lchild %d--rchild %d\n",i,ht[i].weight,ht[i].parent,ht[i].lchild,ht[i].rchild);   
    }

    for(i=n+i;i<=m;i++)
    {
        select(ht,i-1,s1,s2);                   //选出结点中最小的两个数;
        ht[i].weight=ht[s1].weight+ht[s2].weight;           //得出它们的双亲结点;
        ht[s1].parent=i;ht[s2].parent=i;
    }
    for(i=0;i<m;i++)                               //输出哈弗曼树;
        printf("%d--weight %d--parent %d--lchild %d--rchild %d\n",i,ht[i].weight,ht[i].parent,ht[i].lchild,ht[i].rchild);
}


int select(huffman a[],int t,int minx,int miny)
{
minx=100;
miny=100;
int r,j;
for(r=0;r<t;r++)
{
    if((a[r].parent==0)&&(a[r].weight<minx))
    {   
       minx=r;
    }
}
for(j=0;j<t,j!=r;j++)
{
    if((a[j].parent==0)&&(a[j].weight<miny))
    {   
       miny=j;
    }
}
return minx;
return miny;

}
程序编译都没有错误,可是运行怎么不行啊?请各位大侠帮忙看看
搜索更多相关主题的帖子: 哈弗曼 
2009-12-02 11:23
傻瓜爱幻想
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2009-11-24
收藏
得分:0 
debug的时候到           scanf("%d",&n);     //输入叶子结点数;
就停了
2009-12-02 11:26
秋天的童话
Rank: 2
等 级:论坛游民
帖 子:33
专家分:92
注 册:2009-12-1
收藏
得分:20 
停了是什么意思?debug到那句时等待用户输入,所以要停啊,你输入以后也不好使吗?
2009-12-02 11:33
傻瓜爱幻想
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2009-11-24
收藏
得分:0 
回复 3楼 秋天的童话
就是按F10,到那步再按它也不往下继续执行了
2009-12-02 11:37
傻瓜爱幻想
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2009-11-24
收藏
得分:0 
回复 2楼 傻瓜爱幻想
哦,我终于明白你的意思了,呵呵,我再试试,谢谢啦
2009-12-02 11:42
快速回复:帮忙看看哈弗曼树
数据加载中...
 
   



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

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