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

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

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

实现要点:
每个节点有三种状态:
-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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值