poj 2567Code the Tree

/* 解题报告: 1、巧妙的利用优先队列实现 2、注意vectro与set的搭配使用,实现了不易实现的数据结构 3、priority_queue的使用方法 4、输入的递归实现:带括号的可以考虑使用递归 */ #include <iostream> #include <set> #include <vector> #include <queue> using namespace std; void InitObj(vector<set<int> > &obj, unsigned int p = 0) { unsigned int x; cin>>ws>>x; //ws的使用方法 if(p) { obj[p].insert(x); obj[x].insert(p); } while(true) { char ch; cin>>ws>>ch; if(ch == ')') break; InitObj(obj, x); } return ; } int main() { char ch; while(cin>>ws>>ch) { vector<set<int> > obj(1024, set<int>()); InitObj(obj); priority_queue< int, vector<int>, greater<int> > leafs; //使用方法 int n=0; for(int i=0; i<obj.size(); i++) { if(obj[i].size()) { n++; if(1 == obj[i].size()) leafs.push(i); } } //处理优先队列 for(int i=1; i<n; i++) { unsigned int x = leafs.top(); leafs.pop(); unsigned int p = *(obj[x].begin()); if(i>1) cout<<" "; cout<<p; obj[p].erase(x); if(1 == obj[p].size()) leafs.push(p); } cout<<endl; } return 0; }

你可能感兴趣的:(poj 2567Code the Tree)