您的位置:首页 > 理论基础 > 数据结构算法

数据结构基础6.2:图的遍历

2015-11-25 18:12 465 查看
图的遍历方式有两种:

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;
}
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 遍历 bfs dfs