Huffman编码树!!!
描述
构造一个具有n个外部节点的扩充二叉树,每个外部节点Ki有一个Wi对应,作为该外部节点的权。使得这个扩充二叉树的叶节点带权外部路径长度总和最小:
Min( W1 * L1 + W2 * L2 + W3 * L3 + … + Wn * Ln)
Wi:每个节点的权值。
Li:根节点到第i个外部叶子节点的距离。
编程计算最小外部路径长度总和。
输入第一行输入一个整数t,代表测试数据的组数。
对于每组测试数据,第一行输入一个整数n,外部节点的个数。第二行输入n个整数,代表各个外部节点的权值。
2<=N<=100
输出
输出最小外部路径长度总和。
样例输入
2
3
1 2 3
4
1 1 3 5
样例输出
9
17
下面是我的代码:
#include<stdio.h>
int main()
{
int t,n;
int w[2000],min[2000];
scanf("%d",&t);
int i,j,k;
for(i=0;i<t;i++)
{
scanf("%d",&n);
for(j=0;j<n;j++)
{
scanf("%d",w[j]);
}
int h;
for(k=0;k<n;k++)
{
for(j=0;j<n-k-1;j++)
{
if(w[j]>w[j+1])
{
h=w[j];
w[j]=w[j+1];
w[j+1]=h;
}
}
}
int q=n,sum=0;
if(n==1)
{
min[i]=w[0];
}
else
{
w[0]=w[0]*(q-1);
w[1]=w[1]*(q-1);
sum+=w[0]+w[1];
q--;
for(j=2;j<n;j++)
{
sum+=w[j]*(q-1);
q--;
}
min[i]=sum;
}
}
for(i=0;i<t;i++)
{
printf("%d",min[i]);
printf("\n");
}
return 0;
}
代码编译没错,但是运行时就出现了 文件名.exe已停止工作,请大神指点!!!