图的遍历
来源:互联网 发布:心知天气 融资 编辑:程序博客网 时间:2024/06/05 21:02
深度优先遍历
深度优先遍历,也有称为深度优先搜索,简称为DFS。它从图中某个顶点v出发,访问此顶点,然后从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问了。若图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所以顶点都被访问到为止。
对于n个顶点e条边的图来说,邻接矩阵的时间是复杂度是O(NxN),邻接表的时间复杂度是O(n+e)。
typedef int Boolean;Boolean visited[MAX];//邻接矩阵的深度优先遍历void DFS(MGraph G, int i){int j;visited[i] = TRUE;printf("%c ", G.vexs[i]);for (j = 0; j < G.numVertexes; j++)if (G.arc[i][j] == 1 && !visited[j])DFS(G, j);}void DFSTraverse(MGraph G){int i;for (i = 0; i < G.numVertexes; i++)visited[i] = FALSE;for (i = 0; i < G.numVertexes; i++)if (!visited[i])DFS(G, i);}//邻接表的深度优先遍历void DFS(GraphAdjList GL, int i){EdgeNode *p;visited[i] = TRUE;printf("%c ", GL.adjList[i].data);p = GL.adjList[i].firstedge;while (p){if (!visited[p->adjvex])DFS(GL, p->adjvex);p = p->next;}}void DFSTraverse(GraphAdjList GL){int i;for (i = 0; i < GL.numVertexes; i++)visited[i] = FALSE;for (i = 0; i < GL.numVertexes; i++)if (!visited[i])DFS(G, i);}
广度优先遍历
广度优先遍历,又称为广度优先搜索,简称BFS。
如果说图的深度遍历类似于树的前序遍历,那么图的广度搜索就类似于树的层序遍历。
深度遍历更适合目标比较明确,以找到目标为主要目的的情况,而广度优先更适合在不断扩大遍历范围时找到相对最优解的情况。
typedef int Boolean;Boolean visited[MAX];//邻接矩阵的广度遍历void BFSTraverse(MGraph G){int i, j;Queue Q;for (i = 0; i < G.numVertexes; i++)visited[i] = FALSE;InitQueue(&Q);for (i = 0; i < G.numVertexes; i++){if (!visited[i]){visited[i] = TRUE;printf("%c ", G.vexs[i]);EnQueue(&Q, i);while (!QueueEmpty(Q)){DeQueue(&Q, &i);for (j = 0; j < G.numVertexes; j++){if (G.arc[i][j] == 1 && !visited[j]){visited[j] = TRUE;printf("%c ", G.vexs[j]);DeQueue(&Q, j);}}}}}}//邻接表的广度遍历void BFSTraverse(GraphAdjList GL){int i;EdgeNode *p;Queue Q;for (i = 0; i < GL.numVertexes; i++)visited[i] = FALSE;InitQueue(&Q);for (i = 0; i < GL.numVertexes; i++){if (!visited[i]){visited[i] = TRUE;printf("%c ", GL.adjList[i].data);EnQueue(&Q, i);while (!QueueEmpty(Q)){DeQueue(&Q, &i);p = GL.adjList[i].firstedge;while (p){if (!visited[p->adjvex]){visited[p->adjvex] = TRUE;printf("%c ", GL.adjList[p->adjvex].data);EnQueue(&Q, p->adjvex);}p = p->next;}}}}}
0 0
- 图:图的遍历(深度优先遍历、广度优先遍历)
- java图的遍历方式(深度遍历、广度遍历)
- java图的遍历方式(深度遍历、广度遍历)
- 图的遍历(深度遍历和广度遍历)
- 图的遍历:深度优先遍历和广度优先遍历
- 图的 深度遍历 广度遍历
- 图的深度遍历和广度遍历
- 图的遍历(深度优先遍历)
- 图的遍历:深度优先遍历
- 图的遍历:宽度优先遍历
- 图的广度遍历和深度遍历
- 图的深度遍历和广度遍历
- 图的遍历-深度优先遍历
- 图的遍历-广度优先遍历
- 图的dfs遍历和bfs遍历
- 图的深度遍历和广度遍历
- 图的遍历算法-马遍历棋盘
- 图的遍历算法-马遍历棋盘
- 1048. Find Coins (25)
- Android 技巧 - notification center 发出通知时显示文字
- 高性能并行编程【openMP】
- jenkins与ANT集成的问题
- errno头文件
- 图的遍历
- 修改遗忘的mysql的root的密码
- 题目1135:字符串排序
- HDU1198 Farm Irrigation
- [PHP] small example to show dynamic type change
- HDU1166 敌兵布阵
- codeforces215E(数位DP,规律水过)
- 我开通博客了,欢迎大家来我的博客!
- 树状数组