1 条题解

  • 0
    @ 2025-9-10 9:00:36

    C :

    #include <stdio.h>
    #include <stdlib.h>
    typedef struct node
    {
    	char symbol;
    	int freq;
    	int parent;
    	int tag;
    }NODE;
    
    int main()
    {
    	NODE* tree;
    	int i,j;
    	int n;
    	int min;
    	int index1,index2;
    	int depth;
    	char ch;
    	int sum;
    	scanf("%d",&n);
    	while(n>=1)
    	{
    	tree=(NODE*)malloc((2*n-1)*sizeof(NODE));
    	for(i=0;i<n;i++)
    	{
    		scanf("%c%c%d",&ch,&tree[i].symbol,&tree[i].freq);
    		tree[i].parent=-1;
    		tree[i].tag=0;
    	}
    	for(i=n;i<2*n-1;i++)
    	{
    		min=RAND_MAX;
    		for(j=0;j<i;j++)
    		{
    			if(tree[j].tag==0&&tree[j].freq<min)
    		{
    			min=tree[j].freq;
    			index1=j;
    			}
    		}
    		tree[index1].tag=1;
    		min=RAND_MAX;
    		for(j=0;j<i;j++)
    		{
    			if(tree[j].tag==0&&tree[j].freq<min)
    		{
    			min=tree[j].freq;
    			index2=j;
    			}
    		}
    		tree[index2].tag=1;
    		tree[i].freq=tree[index1].freq+tree[index2].freq;
    		tree[i].parent=-1;
    		tree[i].tag=0;
    		tree[index1].parent=i;
    		tree[index2].parent=i;
    		}
    	sum=0;
    	for(i=0;i<n;i++)
    	{
    		depth=0;
    		j=i;
    		while(tree[j].parent!=-1)
    		{
    			j=tree[j].parent;
    			depth++;
    		}
    		sum+=depth*tree[i].freq;
    	}
    	printf("%d\n",sum);
    	scanf("%d",&n);
    	}
    }
    
    

    C++ :

    #include <stdio.h>
    #include <stdlib.h>
    typedef struct node
    {
    	char symbol;
    	int freq;
    	int parent;
    	int tag;
    }NODE;
    
    int main()
    {
    	NODE* tree;
    	int i,j;
    	int n;
    	int min;
    	int index1,index2;
    	int depth;
    	char ch;
    	int sum;
    	scanf("%d",&n);
    	while(n>=1)
    	{
    	tree=(NODE*)malloc((2*n-1)*sizeof(NODE));
    	for(i=0;i<n;i++)
    	{
    		scanf("%c%c%d",&ch,&tree[i].symbol,&tree[i].freq);
    		tree[i].parent=-1;
    		tree[i].tag=0;
    	}
    	for(i=n;i<2*n-1;i++)
    	{
    		min=RAND_MAX;
    		for(j=0;j<i;j++)
    		{
    			if(tree[j].tag==0&&tree[j].freq<min)
    		{
    			min=tree[j].freq;
    			index1=j;
    			}
    		}
    		tree[index1].tag=1;
    		min=RAND_MAX;
    		for(j=0;j<i;j++)
    		{
    			if(tree[j].tag==0&&tree[j].freq<min)
    		{
    			min=tree[j].freq;
    			index2=j;
    			}
    		}
    		tree[index2].tag=1;
    		tree[i].freq=tree[index1].freq+tree[index2].freq;
    		tree[i].parent=-1;
    		tree[i].tag=0;
    		tree[index1].parent=i;
    		tree[index2].parent=i;
    		}
    	sum=0;
    	for(i=0;i<n;i++)
    	{
    		depth=0;
    		j=i;
    		while(tree[j].parent!=-1)
    		{
    			j=tree[j].parent;
    			depth++;
    		}
    		sum+=depth*tree[i].freq;
    	}
    	printf("%d\n",sum);
    	scanf("%d",&n);
    	}
    }
    
    
    • 1

    信息

    ID
    3552
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    (无)
    递交数
    0
    已通过
    0
    上传者