【暑假】[基本数据结构]根据BFS与DFS确定树
2015-08-04 16:54
387 查看
UVa10410 Tree Reconstruction
算法:根据BFS构造pos数组以区分关系,在此基础上对DFS序列操作。注:栈中存父结点,栈顶是最优先的父结点。
代码如下:
算法:根据BFS构造pos数组以区分关系,在此基础上对DFS序列操作。注:栈中存父结点,栈顶是最优先的父结点。
代码如下:
#include<cstdio> #include<vector> #include<stack> #define FOR(a,b,c) for(int a=(b);a<(c);a++) using namespace std; const int maxn= 1000 + 10; int pos[maxn]; //BFS中的位置关系 vector<int> G[maxn]; int main(){ int n; while(scanf("%d",&n)==1){ int x; FOR(i,1,n+1){ scanf("%d",&x); pos[x]=i; G[i].clear(); //G_clear } int root; scanf("%d",&root); stack<int> sta; sta.push(root); int v; FOR(i,1,n){ scanf("%d",&v); for(;;){ int u=sta.top(); if(u==root || pos[u]+1<pos[v]){ //u是v的父结点 sta.push(v); G[u].push_back(v); break; //直到找到父结点 } else //u和v是兄弟 返回到u的父结点 sta.pop(); } } FOR(u,1,n+1){ printf("%d:",u); FOR(j,0,G[u].size()) printf(" %d",G[u][j]); printf("\n"); } } return 0; }
相关文章推荐
- ios 底层数据结构
- 红黑树
- 数据结构及算法综述
- 数据结构及算法综述
- 【细说PHP学习】第九章 PHP中的数组与数据结构
- 数据结构学习笔记1-链表反转(递归与非递归)
- 读书笔记:数据结构与算法分析(java语言描述)——引论
- 数据结构03_栈、队列和数组
- 位图数据结构的实现与应用
- 数据结构 树状数组
- hdu 3791 二叉搜索树(数据结构)
- <C/C++数据结构>常见的树结构
- 数据结构 树
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- HDU 4008 Parent and son (数据结构)
- 数据结构与算法1
- UVA - 12532 Interval Product
- 数据结构之链表、栈和队列 java代码实现
- 数据结构之链表、栈和队列 java代码实现