uva 122 Trees on the level
2013-11-22 13:19
555 查看
题目要求按层次输出数的各个节点,其实只要对输入的数据做个排序就可以了。
#include <iostream> using namespace std; #include <string> #include <set> #include <algorithm> struct Node { string v; string path; }; Node nodes[300]; set<string> v_set; set<string> p_set; int get_(string s) { int i=0; for (i=0;i<s.length();i++) if (s[i]==',') return i; return -1; } bool cmp(const Node& a, const Node& b) { if (a.path.length()!=b.path.length()) return a.path.length()<b.path.length(); return a.path<b.path; } int main() { int flag; int i,j,k; string str; i=0; flag=1; v_set.clear(); p_set.clear(); while (cin >> str) { if (str!="()") { j=get_(str); if (j!=-1) { nodes[i].v=str.substr(1,j-1); nodes[i].path=str.substr(j+1, str.length()-j-2); if (nodes[i].v.length()==0) flag=0; if (p_set.find(nodes[i].path)!=p_set.end()) flag=0; else p_set.insert(nodes[i].path); i++; } } else { if (flag==0) cout << "not complete\n"; else { sort(nodes, nodes+i, cmp); p_set.clear(); if (nodes[0].path.length()==0) { p_set.insert(nodes[0].path); for (j=1;j<i;j++) { if (p_set.find(nodes[j].path.substr(0,nodes[j].path.length()-1))==p_set.end()) flag=0; else p_set.insert(nodes[j].path); } if (flag==0) cout << "not complete\n"; else { for (j=0;j<i-1;j++) cout << nodes[j].v << " "; cout << nodes[j].v << endl; } } else cout << "not complete\n"; } i=0; p_set.clear(); v_set.clear(); flag=1; } } return 0; }
相关文章推荐
- DoglegMethod——“狗腿”算法(上)
- 关于安卓内存分配问题
- Genymotion——PC上也能玩部落冲突 Clash of Clans
- Hyper-V 3.0实用技巧:创建虚拟机组快照
- RedHat 安装JDK
- uva 120 Stacks of Flapjacks
- 3xian教主的警世良言兼退役贴
- 第一章 CLR的执行模型
- UIView设置背景图片的方法
- javascript中instanceof和类的细节
- Developer Color Picker 的使用
- DNS流程和交互
- RAC监听配置
- weblogic11g 配置数据源
- 献给所有的黑客新手
- 《Effective C++》导读
- 反汇编学习(3) -- add函数反汇编
- Excel同工作簿不同工作表数据汇总-SQL或数据透视表和数据透视图向导
- UVA 111 History Grading
- Android Animation动画