欧拉回路 + 数据结构 + dfs
2013-05-09 17:08
190 查看
poj 2230
这个题确实很经典。刚开始的时候想了好久,一直没想明白怎么去遍历所有的点两遍。搜了,别人的解题报告。顿悟,标记边啊。太弱了。。然后保存成动态邻接表的形式。深搜一遍就过了。。后来看到一大牛博客上的解法,瞬间,觉得,那种相对邻接表保存的数据结构,简直碉堡了,神牛果然是用来学习的。。
邻接表:
大牛的强势保存形式:
这个题确实很经典。刚开始的时候想了好久,一直没想明白怎么去遍历所有的点两遍。搜了,别人的解题报告。顿悟,标记边啊。太弱了。。然后保存成动态邻接表的形式。深搜一遍就过了。。后来看到一大牛博客上的解法,瞬间,觉得,那种相对邻接表保存的数据结构,简直碉堡了,神牛果然是用来学习的。。
邻接表:
#include <iostream> #include <vector> #include <cstdio> #define N 100005 using namespace std; int n,m; struct node { int v,f; }; vector<node> g ; void dfs(int k) { for(int i=0 ;i<g[k].size() ; i++) { if(g[k][i].f) { g[k][i].f=0; dfs(g[k][i].v); } } printf("%d\n",k); } int main () { int i; //freopen("1.txt","r",stdin); while(scanf("%d%d",&n,&m)!=EOF) { int x,y; for(i=0 ; i<m ; i++) { node t; scanf("%d%d",&x,&y); //x->y t.v=y,t.f=1; g[x].push_back(t); //y->x t.v=x,t.f=1; g[y].push_back(t); } dfs(1); } return 0; }
大牛的强势保存形式:
#include <iostream> #include <cstdio> #include <cstring> #include <string> #define N 100005 using namespace std; bool f ; struct node { int t,nx; }e ; int n,m,a ,nt; void dfs(int k) { int v; for(v=a[k] ; v!=-1 ; v=e[v].nx) { if(!f[v]) { f[v]=1,dfs(e[v].t); } } printf("%d\n",k); } int main () { //freopen("1.txt","r",stdin); while(scanf("%d%d",&n,&m)!=EOF) { int i,x,y; memset(f,0,sizeof(f)); memset(a,-1,sizeof(a)); for(nt=i=0 ; i<m ; i++) { scanf("%d%d",&x,&y); //x->y e[nt].t=y,e[nt].nx=a[x],a[x]=nt++; //y->x e[nt].t=x,e[nt].nx=a[y],a[y]=nt++; } dfs(1); } return 0; }btw:要理解 后面那段代码的保存结构,建议自己画图。 (个人以最近孩子的概念,每个节点保存了 ta上一个兄弟节点的信息。。)
相关文章推荐
- 数据结构和算法总结(一):广度优先搜索BFS和深度优先搜索DFS
- 求欧拉回路的路径 dfs的一种新运用
- 数据结构----BFS和DFS详解
- NYOJ 一笔画问题(DFS+欧拉回路)
- poj2230 dfs 欧拉回路
- 数据结构:图1(DFS遍历)
- 数据结构 邻接链表 DFS
- codeforces 804B——Ice cream coloring(图论,dfs,数据结构,好题)
- poj 2886 Who Gets the Most Candies?(数据结构:线段树+DFS反素数打表)
- Uva 10129 (dfs判断连通 +欧拉回路)
- 【数据结构】深度优先搜索BFS和广度优先搜索DFS
- [数据结构]Graph之拓扑排序BFS&DFS实现
- 数据结构(11) -- 邻接表存储图的DFS和BFS
- 【暑假】[基本数据结构]根据BFS与DFS确定树
- 数据结构(二) 深度优先遍历 DFS
- 【数据结构】C++实现整理_图的BFS与DFS(递归非递归)
- [数据结构]八皇后(暴力,解答树,DFS回溯)
- NYOJ - 42 - 一笔画问题(欧拉回路,DFS)
- hdu1878欧拉回路(DFS+欧拉回路)
- POJ2230 Watchcow(欧拉回路 + dfs)