图的遍历-深度优先遍历
来源:互联网 发布:许嵩如果当时知乎 编辑:程序博客网 时间:2024/05/21 16:55
图的遍历跟树的遍历一样,从图中一点出发遍历图中其余顶点,且使每一个顶点仅被访问一次 叫 Traversing Graph
depth first search DFS 深度优先遍历 深度优先搜索 类似与Tree中 前序遍历
具体算法表述如下:
访问初始结点v,并标记结点v为已访问。
查找结点v的第一个邻接结点w。
若w存在,则继续执行4,否则算法结束。
若w未被访问,对w进行深度优先遍历递归(即把w当做另一个v,然后进行步骤123)。
查找结点v的w邻接结点的下一个邻接结点,转到步骤3。
例如下图,其深度优先遍历顺序为 1->2->4->8->5->3->6->7
bool visited[MAX];//初始化全为false邻接矩阵 深度优化递归 因为边存在1才能访问// 递归法void DFS(MGraph G, int i)//从第i个开始遍历{visited[i] = true;cout<<G.VexArr[i];for(int j=0;j<G.numV;j++){if(G.arc[i][j] == 1 && ! visited[j]){DFS(G,j);}}}void DFSTraverse(MGraph G) //邻接矩阵深度遍历操作{for(int i=0;i<G.numV;j++){visited[i] = false;}for(int i=0;i<G.numV;i++){if(! visited[i])//对未访问过的顶点调用DFS, 如果是连通图则上面的for循环只执行一次就{DFS(G,i);}}}
邻接表
bool visited[MAX];//初始化全为false邻接表 深度优化递归 // 递归法void DFS(GraphList G, int i)//从第i个开始遍历{visited[i] = true;EdgeNode *p = NULL;cout << G.adjlist[i].data;//输出 刚刚遍历的那个节点p = G->adjlist[i].firstedge;//p指向 邻接表的首地址while(p){if(!visited[p->adjvex]){DFS(G, p->adjvex);}p = p->next;}}void DFSTraverse(GraphList G) //邻接矩阵深度遍历操作{for(int i=0;i<G.numV;j++){visited[i] = false;}for(int i=0;i<G.numV;i++){if(! visited[i])//对未访问过的顶点调用DFS, 如果是连通图则上面的for循环只执行一次就{DFS(G,i);}}}http://blog.csdn.net/todd911/article/details/9191481
对于n个顶点e个边的图来说 邻接矩阵遍历时间复杂度为O(n^2); 而邻接表复杂度为O(n+e); 对于有向图而言只是在对通道存在可行或者不可行,基本算法上差别不太大
0 0
- 图:图的遍历(深度优先遍历、广度优先遍历)
- 图的遍历:深度优先遍历和广度优先遍历
- 图的遍历(深度优先遍历)
- 图的遍历:深度优先遍历
- 图的遍历-深度优先遍历
- 图的遍历之深度优先遍历
- 图的遍历-深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 纯CSS 仿某网站 loading加载动画
- HDU 1033 Edge
- docker 的启动
- PL SQL删除对象语句
- Sqoop 加载数据到ORC表
- 图的遍历-深度优先遍历
- js预解析介绍
- 注释驱动的 Spring cache 缓存介绍
- 【APIO2010T2】巡逻-贪心+树形DP
- 移植Qt-4.8.5出现undefined reference to '__sync_sub_and_fetch_4'
- LOG的properties
- jquery判断两个数组中相同元素
- Jacobian
- Java基础之数组(2)