POJ 1635 Subway tree systems
来源:互联网 发布:mac有什么游戏玩儿 编辑:程序博客网 时间:2024/06/08 04:54
/*主要是根据输入串建树,然后对树DFS,重新获得一个排序后的01串。
对两个输入串分别运用上述方法分别得到两个排序后的01串,如果两个串相等则same,否则different
关键在于DFS时对子树返回的01串进行存储和排序,然后重组
比如对于
0100101100100111和0011000111010101,重组后分别变成:
0001101100101101和0001110011010101,不相等所以输出different
*/
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#define MAX_N 3000
using namespace std;
struct tree
{
tree *parent;
tree *next; //第一个儿子
tree *bro; //兄弟
tree()
{
parent = next = bro = NULL;
}
};
//建树
tree *buildTree(string str)
{
int p;
char ch;
tree *root = new tree();
tree *cur = root;
for(p = 0; p < str.length(); p++)
{
ch = str[p];
if(ch == '0')
{
tree *temp = new tree();
temp->parent = cur;
tree *nptr = cur;
if(nptr->next)
{
nptr = nptr->next;
while(nptr->bro)
nptr = nptr->bro;
nptr->bro = temp;
}
else
nptr->next = temp;
cur = temp;
}
else if(ch == '1')
{
cur = cur->parent;
}
}
return root;
}
tree *beginRoot;
//重组DFS,获得排序后的01串
string travelSeq(tree *root)
{
tree *nptr = root;
vector<string> vec;
//遍历所有儿子
if(nptr->next)
{
vec.push_back(travelSeq(nptr->next));
nptr = nptr->next;
while(nptr->bro)
{
vec.push_back(travelSeq(nptr->bro));
nptr = nptr->bro;
}
}
//排序
sort(vec.begin(), vec.end());
vector<string>::iterator iter = vec.begin();
string res = "";
//组合
for(; iter != vec.end(); iter++)
res += *iter;
if(root != beginRoot) res = '0' + res + '1';
return res;
}
int main()
{
int caseN;
string str1, str2;
scanf("%d", &caseN);
while(caseN--)
{
cin>>str1>>str2;
beginRoot = buildTree(str1);
str1 = travelSeq(beginRoot);
beginRoot = buildTree(str2);
str2 = travelSeq(beginRoot);
if(str1 == str2)
printf("same/n");
else
printf("different/n");
}
return 0;
}
- POJ 1635 Subway tree systems
- poj 1635 Subway tree systems
- poj 1635 Subway tree systems
- POJ 1635 Subway tree systems
- poj 1635 Subway tree systems
- POJ 1635 Subway tree systems
- POJ 1635 Subway tree systems
- POJ 1635 Subway tree systems
- POJ 1635 Subway tree systems
- POJ 1635 Subway tree systems (BSOJ 1092)
- poj 1635 Subway tree systems 判断是否是同构树
- Poj 1635 Subway tree systems (树的最小表示)
- poj 1635 Subway tree systems(树的同构,经典)
- Subway tree systems - POJ 1635 树的最小表示法
- poj 1635 Subway tree systems (树同构)
- poj1635 - Subway tree systems
- POJ1635 Subway tree systems
- poj-1635 Subway tree systems(判断两个有根树是否同构)-哈希法
- MFC与QT混合编程---在MFC程序中使用QT的组件
- 杭电ACM1003
- 程序员的好帮手 - 我的异常网
- 数据结构与算法分析-开放定址散列表的实现
- Oracle Spatial 简介
- POJ 1635 Subway tree systems
- 基本 MDX 查询 ( MDX 语法 教程 )
- 关闭winform窗体时,出现了bug,貌似微软VS.NET2005的问题,请教大家该如何解决
- 正则表达式运用到JSP页面(使用在input 标签内)
- Eclipse技巧及启动参数
- Linux Diff命令
- Struts使用随机验证码
- SQL Server 2005: SQL Server Storage and Index Structures
- 一段使用VBScript整理文件的代码