数组模拟存邻接表跑dfs 模板
2017-05-22 15:32
381 查看
之前一直是用点跑dfs,结果发现稀疏图的时候这样跑很慢
所以,用数组模拟的邻接表跑边还好些
下面是跑点的深度的dfs
这里是一个非常详细直观的数组模拟邻接表讲解
所以,用数组模拟的邻接表跑边还好些
下面是跑点的深度的dfs
#include<cstdio> #include<iostream> #define L 1005 using namespace std; int n, m, tot; struct node{ int to, nxt, val; //nxt存同一出发点的上一条边; to存这条边终点; val存这条边权值; }edge[L]; bool flag[L]; int head[L], dep[L]; //下标指点的编号; 数组存存的最后一条从该点出发的边的编号; void add_edge(int from, int to, int dis){ edge[++tot].nxt = head[from]; edge[tot].to = to; edge[tot].val = dis; head[from] = tot; } void dfs(int cur, int depth){ dep[cur] = depth; for(int i=head[cur];i;i=edge[i].nxt){ //dfs跑边的顺序与存入时相反; if(!flag[i]) flag[i] = true, dfs(edge[i].to, dep[cur]+1); } } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ int u, v, d; scanf("%d%d%d",&u,&v,&d); add_edge(u, v, d); } dfs(1, 1); for(int i=1;i<=n;i++) printf("%d ",dep[i]); return 0; }
这里是一个非常详细直观的数组模拟邻接表讲解
相关文章推荐
- 2014新生暑假个人排位赛06 -444. 爱好和平 (数组模拟邻接表+dfs)
- 数组模拟邻接表模板
- poj 3083 Children of the Candy Corn(bfs+dfs 数组模拟方向)
- 邻接表的两种实现(链表和数组模拟)
- hash 链地址法+ 数组模拟邻接表实现
- HDU 5102 The K-th Distance(队列模拟,数组模拟邻接表)
- 迪杰斯特拉--数组模拟邻接表优化
- joj 2431: Shift and Increment (模板队列与数组模拟队列的对比练习)
- [置顶] 链式前向星(数组模拟邻接表)
- 数组模拟实现邻接表
- 数组模拟实现邻接表
- 数组模拟实现邻接表
- 递归深度优先遍历图(DFS)(邻接表和数组两种方式)
- 【姜神向前星】-链式向前星(数组模拟邻接表)
- 链式向前星(数组模拟邻接表)
- 使用数组来模拟邻接表存储图信息
- poj 3013(数组模拟邻接表+spfa)
- poj1511(第一次用数组模拟邻接表…
- 数组模拟邻接表
- 用数组模拟邻接表