Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[7007] C++ 허프만 코드 주석 좀 부탁드립니다.!!
한불새 [] 1411 읽음    2018-11-27 22:05
#include<iostream>
#include<vector>
#include<string>
using namespace std;
struct node
{
node * leftChild;
node * rightChild;
double frequency;
    string content;
string code;
};
vector<node> nodeArray;// Use nodeArray to record all the nodes that may be created in the whole process
node  extractMin()
{
double temp = (double) INT_MAX;
    vector<node>::iterator i1,pos;
    for(i1 = nodeArray.begin();i1!=nodeArray.end();i1++)
{
 
  if(temp>(*i1).frequency)
  {
     pos = i1;
     temp = (*i1).frequency;
  }
}
node tempNode = (*pos);
nodeArray.erase(pos);
return tempNode;
}             
node getHuffmanTree()
{
while(!nodeArray.empty())
{
   node * tempNode = new node;  
      node * tempNode1 = new node;
   node * tempNode2 = new node;
      *tempNode1 = extractMin();
   *tempNode2 = extractMin();
   tempNode->leftChild = tempNode1;
   tempNode->rightChild = tempNode2;
   tempNode->frequency = tempNode1->frequency+tempNode2->frequency;
   nodeArray.push_back(*tempNode);
   if(nodeArray.size() == 1)//only the root node exsits
   {
    break;
   }
}
    return nodeArray[0];
}
void BFS(node * temproot,string s)
{
   node * root1 = new node;
   root1 = temproot;
   root1->code = s;
   if(root1 == NULL)
   {

   }
   else if(root1->leftChild == NULL && root1->rightChild == NULL)
   {
   
    cout<<root1->content<<endl;
    cout<<"부호"<<root1->code<<endl;
   }
   else
   {
  
      root1->leftChild->code = s.append("0");
   s.erase(s.end()-1);
   root1->rightChild->code = s.append("1");
   s.erase(s.end()-1);


      BFS(root1->leftChild,s.append("0"));
   s.erase(s.end()-1);
      BFS(root1->rightChild,s.append("1"));
   s.erase(s.end()-1);
}
  
}

void getHuffmanCode()
{
int size,i;
double tempDouble;
string tempString = "";

cout<<"글자수를 입력하시오. "<<endl;
cin>>size;

for(i = 0;i<size;i++)
{
  cout<<"알파벳 순서대로 값 입력하시오. "<<endl;
  node tempNode;
  cin>>tempString;
  cin>>tempDouble;


  tempNode.frequency = tempDouble;
  tempNode.content = tempString;
  tempNode.leftChild = NULL;
  tempNode.rightChild = NULL;
  nodeArray.push_back(tempNode);
}

node root = getHuffmanTree();

BFS(&root,"");

}

int main()
{

vector<int> test;
test.push_back(1);
test.push_back(2);
test.push_back(3);
test.push_back(4);
vector<int>::iterator i1 = test.begin();
test.erase(i1);
  
getHuffmanCode();
return 0;
}

+ -

관련 글 리스트
7007 C++ 허프만 코드 주석 좀 부탁드립니다.!! 한불새 1411 2018/11/27
7009     Re:C++ 허프만 코드 주석 좀 부탁드립니다.!! 김상면 1497 2019/01/19
7008     Re:C++ 허프만 코드 주석 좀 부탁드립니다.!! 김상면 1764 2019/01/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.