?? main.cpp
字號:
#include <iostream>
#include <vector>
#include <list>
using namespace std;
struct TREE
{
int row;
int data;//數值
int Check;//判斷是否已經寫入
TREE * L;
TREE * R;//左右子樹
};
list<TREE> Huf;//存儲
TREE Temp;//中間變量
vector<TREE> Save;//存儲
vector<TREE> Mid;//中間變量
void Operate()//開始運算
{
list<TREE>::iterator t1;
list<TREE>::iterator t2;
list<TREE>::iterator t;
int Min=99999;
for(t=Huf.begin();t!=Huf.end();t++)
if(t->Check==0&&t->data<Min)
{
t1=t;
Min=t->data;
}
t1->Check=1;
Temp.L=&(*t1);//找出第一個最小
Min=99999;
for(t=Huf.begin();t!=Huf.end();t++)
if(t->Check==0&&t->data<Min)
{
t2=t;
Min=t->data;
}
t2->Check=1;
Temp.R=&(*t2);//找出第二個最小
Temp.data=t1->data+t2->data;
if(t1->row>=t2->row)
Temp.row=t1->row+1;
else
Temp.row=t2->row+1;
/*cout<<t1->data<<' '<<t2->data<<' '<<Temp.data<<endl;*/
Huf.push_back(Temp);//求和并建立新結點
/*cout<<t->data<<' ';
cout<<t->L->data<<' '<<t->R->data<<' '<<endl;*/
return;
}
void Print()//輸出
{
Mid.clear();
/*cout<<Save.size()<<endl;*/
for(vector<TREE>::iterator t=Save.begin();t!=Save.end();t++)
{
if((*t).L)
{
cout<<(*t).L->data<<','<<(*t).R->data<<"("<<(*t).data<<")"<<' ';
Mid.push_back(*((*t).L));
Mid.push_back(*((*t).R));
}
}//輸出結果
Save=Mid;
cout<<endl;
return;
}
int main()
{
Temp.Check=0;
Temp.row=1;
Temp.L=NULL;
Temp.R=NULL;
cout<<"請輸入數量"<<endl;
int n;
cin>>n;
cout<<"按順序分別輸入大小"<<endl;
for(int i=1;i<=n;i++)
{
cin>>Temp.data;
Huf.push_back(Temp);
}//初始化
//for(list<TREE>::iterator k=Huf.begin();k!=Huf.end();k++)
//cout<<k->data<<' '<<k->Check<<endl;
for(int i=1;i<=n-1;i++)
Operate();//開始運算
//for(list<TREE>::iterator k=Huf.begin();k!=Huf.end();k++)
//cout<<k->data<<' '<<k->Check<<endl;
list<TREE>::iterator k=Huf.end();
--k;
/*cout<<k->row<<endl;*/
cout<<k->data<<endl;//輸出最上層
Save.push_back((*k));
for(int i=1;i<=k->row-1;i++)//按層輸出
Print();
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -