数据结构基础6.2:图的遍历
2015-11-25 18:12
465 查看
图的遍历方式有两种:
1.深度优先搜索(DGS),类似于树的前序遍历。
2.广度优先搜索(BFS),类似于树的层次遍历。
具体代码如下:
1.DFS:
2.BFS
void Visit(Vertex n)
{
printf("%d ", n);
}
/* 广度优先搜索 */
Status BFS_Traverse(MGraph graph)
{
int i, j, temp;
SeqQue *queue = InitQueue(MAXSIZE);
if(!graph)
return ERROR;
for(i = 0; i < MaxVertexSize; i++)
visited[i] = false;
for(i = 0; i < graph->Nv; i++) {
if(!visited[i]) {
EnQueue(queue, i);
visited[i] = true;
while(!QueueEmpty(queue)) {
DeQueue(queue, &temp);
Visit(temp);
for(j = 0; j < graph->Nv; j++) {
if(graph->matrix[temp][j] != 0 && !visited[j]) {
EnQueue(queue, j);
visited[j] = true;
}
}
}
}
}
}
1.深度优先搜索(DGS),类似于树的前序遍历。
2.广度优先搜索(BFS),类似于树的层次遍历。
具体代码如下:
1.DFS:
void Visit(Vertex n) { printf("%d ", n); } /* DFS递归调用,类似树的前序遍历 */ void DFS(MGraph graph, Vertex n, void (*Visit)(Vertex)) { Vertex i; printf("%d ", n); visited = true; for(i = 0; i < graph->Nv; i++) { if(graph->matrix [i] != 0) { if(!visited[i]) { DFS(graph, i, Visit); } } } } /* 深度优先搜索 */ Status DFS_Traverse(MGraph graph) { int i; for(i = 0; i < MaxVertexSize; i++) visited[i] = false; if(!graph) return ERROR; for(i = 0; i < graph->Nv; i++) { if(!visited[i]) { DFS(graph, i, Visit); } } return OK; }
2.BFS
void Visit(Vertex n)
{
printf("%d ", n);
}
/* 广度优先搜索 */
Status BFS_Traverse(MGraph graph)
{
int i, j, temp;
SeqQue *queue = InitQueue(MAXSIZE);
if(!graph)
return ERROR;
for(i = 0; i < MaxVertexSize; i++)
visited[i] = false;
for(i = 0; i < graph->Nv; i++) {
if(!visited[i]) {
EnQueue(queue, i);
visited[i] = true;
while(!QueueEmpty(queue)) {
DeQueue(queue, &temp);
Visit(temp);
for(j = 0; j < graph->Nv; j++) {
if(graph->matrix[temp][j] != 0 && !visited[j]) {
EnQueue(queue, j);
visited[j] = true;
}
}
}
}
}
}
相关文章推荐
- 文件遍历排序函数
- 渗透技术一瞥(图)
- 图片引发的溢出危机(图)
- Lua 学习笔记之C API 遍历 Table实现代码
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#遍历文件夹后上传文件夹中所有文件错误案例分析
- C#数据结构揭秘一
- C#中遍历Hashtable的4种方法
- Erlang中遍历取出某个位置的最大值代码
- 数据结构之Treap详解
- C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析
- C++实现图的邻接表存储和广度优先遍历实例分析
- C++非递归队列实现二叉树的广度优先遍历
- php遍历目录方法小结
- 一个目录遍历函数
- php遍历删除整个目录及文件的方法
- PHP遍历文件夹与文件类及处理类用法实例
- 【数据结构与算法】数组应用4:多项式计算Java版
- 【数据结构与算法】数组应用3:稀疏矩阵压缩(Java实现)