TA的每日心情 | 擦汗 2019-7-9 22:59 |
|---|
签到天数: 7 天 [LV.3]偶尔看看II

注册会员

- 积分
- 71
|
#include <iostream>
#include<stdio.h>
using namespace std;
struct node {
int parent;
int lchild,rchild;
int weight;
};
node* array;
int select_min(int n) {
int minIndex;
for(int i=0;i<2*n-1;i++){
if(array[i].parent==-1&&array[i].weight!=0) {
minIndex=i;break;
}
}
for(int i=0; i<2*n-1; i++) {
if(array[i].parent==-1&&array[i].weight!=0) {
if(array[i].weight<array[minIndex].weight)
minIndex=i;
}
}
array[minIndex].parent=1;
return minIndex;
}
void CreatHuffman(int *w,int n) {
for(int i=0; i<2*n-1; i++) {
array[i].parent=-1;
array[i].lchild=-1;
array[i].rchild=-1;
array[i].weight=w[i];
}
for(int j=n; j<2*n-1; j++) {
int min_lchild=select_min(n);
int min_rchild=select_min(n);
array[j].lchild=min_lchild;
array[j].rchild=min_rchild;
array[j].weight=array[min_lchild].weight+array[min_rchild].weight;
array[min_lchild].parent=j;
array[min_rchild].parent=j;
}
}
void showData(int n) {
for(int i=0; i<2*n-1; i++) {
cout<<array[i].weight<<","<<array[i].parent<<","<<array[i].lchild<<","<<array[i].rchild<<endl;
}
}
int main() {
int n;
while(cin>>n) {
array=new node[2*n-1];
int *w=new int[2*n-1];
for(int i=0; i<n; i++) {
char ch;
cin>>ch>>w[i];
}
for(int i=n; i<2*n-1; i++)
w[i]=0;
CreatHuffman(w,n);
showData(n);
cout<<endl;
}
return 0;
}
#include <iostream>
#include<stdio.h>
using namespace std;
struct node {
int parent;
int lchild,rchild;
int weight;
};
node* array;
int select_min(int n) {
int minIndex;
for(int i=0;i<2*n-1;i++){
if(array[i].parent==-1&&array[i].weight!=0) {
minIndex=i;break;
}
}
for(int i=0; i<2*n-1; i++) {
if(array[i].parent==-1&&array[i].weight!=0) {
if(array[i].weight<array[minIndex].weight)
minIndex=i;
}
}
array[minIndex].parent=1;
return minIndex;
}
void CreatHuffman(int *w,int n) {
for(int i=0; i<2*n-1; i++) {
array[i].parent=-1;
array[i].lchild=-1;
array[i].rchild=-1;
array[i].weight=w[i];
}
for(int j=n; j<2*n-1; j++) {
int min_lchild=select_min(n);
int min_rchild=select_min(n);
array[j].lchild=min_lchild;
array[j].rchild=min_rchild;
array[j].weight=array[min_lchild].weight+array[min_rchild].weight;
array[min_lchild].parent=j;
array[min_rchild].parent=j;
}
}
void showData(int n) {
for(int i=0; i<2*n-1; i++) {
cout<<array[i].weight<<","<<array[i].parent<<","<<array[i].lchild<<","<<array[i].rchild<<endl;
}
}
int main() {
int n;
while(cin>>n) {
array=new node[2*n-1];
int *w=new int[2*n-1];
for(int i=0; i<n; i++) {
char ch;
cin>>ch>>w[i];
}
for(int i=n; i<2*n-1; i++)
w[i]=0;
CreatHuffman(w,n);
showData(n);
cout<<endl;
}
return 0;
} |
|