利比里亚维和王雳:请教高手
来源:百度文库 编辑:神马品牌网 时间:2024/04/27 19:50:57
我写的这个哈夫曼树的程序,没有错误,但运行时会有系统错误,请问高手这是哪里错了,谢谢!
#include "stdafx.h"
#include<iostream.h>
#include<stdio.h>
#define maxsize 100
typedef struct {
int parent,lchild,rchild;
int weight;
int cd[maxsize];
int tag;
int start;
}node;
void main()
{
int i,j,p,n,s1,s2,c,f;
node ht[100];
printf("请输入结点的个数:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("请输入第%d个结点的权值:",i);
scanf("%d",&ht[i].weight);
ht[i].parent=ht[i].lchild=ht[i].rchild=ht[i].tag=0;
}
for(p=n+1;p=2*n-1;p++)
{
s1=1000;
s2=1000;
for(i=1;i<=p-1;i++)
if(ht[i].tag==0&&s1>ht[i].weight)
{
s1=i;
ht[s1].tag=1;
ht[i].parent=p;
}
for(i=1;i<=p-1;i++)
{
if(ht[i].tag==0&&s2>ht[i].weight)
{
s2=i;
ht[s2].tag=1;
ht[i].parent=p;
}
ht[p].lchild=s1;
ht[p].rchild=s2;
ht[p].tag=0;
ht[p].weight=ht[s1].weight+ht[s2].weight;
}
}
for(i=1;i<=n;i++) {
ht[i].start=n;
for(c=i,f=ht[i].parent;f!=0;c=f,f=ht[f].parent)
if(ht[f].lchild==c) ht[i].cd[ht[i].start--]=0;
else ht[i].cd[ht[i].start--]=1;
}
for(i=1;i<=n;i++)
for(j=n-ht[i].start;j<=n;j++)
printf("%d",ht[i].cd[j]);
}
运行时可以输几个结点的权值,可是输完后按回车,没有输出结果,但是却出现了提示说程序出现了错误,需要关闭,请问各位高手这是怎么回事啊?
#include "stdafx.h"
#include<iostream.h>
#include<stdio.h>
#define maxsize 100
typedef struct {
int parent,lchild,rchild;
int weight;
int cd[maxsize];
int tag;
int start;
}node;
void main()
{
int i,j,p,n,s1,s2,c,f;
node ht[100];
printf("请输入结点的个数:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("请输入第%d个结点的权值:",i);
scanf("%d",&ht[i].weight);
ht[i].parent=ht[i].lchild=ht[i].rchild=ht[i].tag=0;
}
for(p=n+1;p=2*n-1;p++)
{
s1=1000;
s2=1000;
for(i=1;i<=p-1;i++)
if(ht[i].tag==0&&s1>ht[i].weight)
{
s1=i;
ht[s1].tag=1;
ht[i].parent=p;
}
for(i=1;i<=p-1;i++)
{
if(ht[i].tag==0&&s2>ht[i].weight)
{
s2=i;
ht[s2].tag=1;
ht[i].parent=p;
}
ht[p].lchild=s1;
ht[p].rchild=s2;
ht[p].tag=0;
ht[p].weight=ht[s1].weight+ht[s2].weight;
}
}
for(i=1;i<=n;i++) {
ht[i].start=n;
for(c=i,f=ht[i].parent;f!=0;c=f,f=ht[f].parent)
if(ht[f].lchild==c) ht[i].cd[ht[i].start--]=0;
else ht[i].cd[ht[i].start--]=1;
}
for(i=1;i<=n;i++)
for(j=n-ht[i].start;j<=n;j++)
printf("%d",ht[i].cd[j]);
}
运行时可以输几个结点的权值,可是输完后按回车,没有输出结果,但是却出现了提示说程序出现了错误,需要关闭,请问各位高手这是怎么回事啊?
在我这里运行一点也没有错的啊
没关工作区吧