无向图 深度优先遍历 c语言实现

来源:互联网 发布:4钻淘宝店出售多少钱 编辑:程序博客网 时间:2024/05/22 16:06

无向图的深度优先遍历的实现,无向图用邻接表表示无向图的表示:邻接矩阵和邻接表。

程序使用的示例图为:
这里写图片描述

实现要点:
每个节点有三种状态:
-1,还未发现
0,已经发现了,正在处理,还没有处理完
1,已经处理完了
为防止循环调用dfs,只有在节点是-1状态时才调用dfs函数

代码如下:

#include <stdio.h>#include <stdlib.h>#include "graph_represent.h"//后序遍历图void DFS(struct vNode** adj,int v,int* color){    struct vNode* w;    color[v] = 0;           printf("%d ",v);/**在这里前序处理节点**/    w = adj[v];    while(w != NULL){        if(color[w->value]==-1){            DFS(adj,w->value,color);        }        w = w->next;    }    /**这里后序处理节点**/    color[v] = 1;}//参数:邻接表,节点个数,开始节点,void dfs_wraper(struct vNode** adj,int n,int s){    int* color = (int*)malloc(sizeof(int)*n);    int i;    for(i=0;i<n;i++){        color[i] = -1;  //将所有的顶点设置为未发现状态。    }    DFS(adj,s,color);    /*假设图是连通的,不连通时,调用下面代码即可    for(i=0;i<n;i++)        DFS(adj,i,color);    */    printf("\n");}void main(){    //获得默认图,一共有7个节点    int n = 7;    struct vNode** adjVertics = default_wraper();    printf("\ndeepth first search:\n");    dfs_wraper(adjVertics,n,2); //从2开始遍历}

这里从2开始深度遍历,结果为:2 0 1 3 5 4 6

0 0
原创粉丝点击