图的遍历之DFS算法

图的遍历即从其中的一个顶点出发,沿着一些边访问图中所有的顶点,且每个顶点只访问一次。图的遍历可以通过两种方法来实现:即深度优先搜索(Deth First Search)和广度优先搜索(Breadth First Search).这两种方法基于不同的思想,先来介绍DFS的思想。   深度优先搜索是一种递归的过程,有回退。1:对于一个无向连通图而言,在访问图中的某一起始顶点V后,由V出发,访问
摘要由CSDN通过智能技术生成

   图的遍历即从其中的一个顶点出发,沿着一些边访问图中所有的顶点,且每个顶点只访问一次。图的遍历可以通过两种方法来实现:即深度优先搜索(Deth First Search)和广度优先搜索(Breadth First Search).这两种方法基于不同的思想,先来介绍DFS的思想。

   深度优先搜索是一种递归的过程,有回退。

1:对于一个无向连通图而言,在访问图中的某一起始顶点V后,由V出发,访问它的某一个邻接顶点W1;

2:再从W1出发,进行类似1的访问……直至访问到wi,而Wi正好无节点访问时暂停。

3:接着,回退一步至前一次被访问的节点Wi-1,看是否有其他未被访问过的邻接结点,若果有再重复步骤2,否则在回退。

4,重复上述过程,直至该连通图中所有顶点都被访问过为止。

DFS算法的实现:

在实现DFS(v)函数中,实现从顶点v出发访问它所有未访问过的邻接结点需要在DFS算法中设置一个visited[n]的标记数组来存储和标记各顶点的访问状态,设visited[i]=1,表示顶点i被访问过;visited[i]=0,则表示顶点i还未被访问。初始化visited[n]={0};

若图是用邻接表存储的,则实现如下:

DFS(顶点i)  //从顶点i进行深度优先搜索
{
    visited[i]=1;  //将顶点i的访问标志置为1
    p=顶点i的边链表表头指针;
    while(p不为空)
    {
        //设指针p所指向的边结点所表示的边中,另一个顶点为顶点j
        if(j未被访问
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值