【图的深度优先遍历】输出DFS序列

这篇具有很好参考价值的文章主要介绍了【图的深度优先遍历】输出DFS序列。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

算法思想:

能走就必须走,不撞南墙不回头。
①随便从一个点开始走
②随机选择一条边走,只要这个点还能往下走的话,就一定要往下走不能回头,每个点只能走一次
③当这个点走不动之后再回溯,回溯到之前的点看看还有没有别的边没走

注意:

①判重:
不管是dfs还是bfs,一定要记得判重,即每个点只能走一次 ,不能重复走
②dfs序列
dfs序列(又叫深度优先遍历序列):到达(访问),每个点的顺序称为DFS序列
区别:
到达顺序:在递归开头遍历——>dfs序列
回溯顺序:在递归结尾遍历——>拓扑排序
③图的连通性:
dfs要注意图的连通性问题,图可能不连通,所以一定要枚举所有点,如果没搜过的话
而bfs一般不需要考虑图的连通性问题,因为不影响他的答案

画图理解:

dfs代码输出,数据结构,深度优先,算法,图论,数据结构,dfs文章来源地址https://www.toymoban.com/news/detail-639206.html

代码实现:

#include <iostream>
using namespace std;
const int N=100010;

struct Node{
    int id;//节点编号
    Node *next;//next指针:下一个节点的地址
    
    Node(int _id): id(_id),next(NULL){}
}*head[N];

/*
邻接表:每个点都用一个单链表来存,所以需要开一个n个链表的头结点

*head[maxn]的意思:
这里相当于是一个装头节点的的指针数组.
比如与结点邻近有三个结点2、3、4,那么h[1]表示结点1邻近所有结点的链表,
即h[1]表示结点1周围邻近节点的单链表的表头, 1 -> 2 -> 3 -> 4,其中2、3、4顺序随意。
h[1]到h[n]分别表示了每个结点的邻近结点的情况,即每个h[i]都对应一个链表。
所以需要加星号表示这个数组中存放的是Node* 类型的数据

*/


int n,m; //n个点m条边
bool st[N];//判重数组,标记这条边是否出现过


//头插法邻接表建图
void add(int a,int b)
{
    Node *p=new Node(b);//创建一个点,点的编号是b
    p->next=head[a];
    head[a]=p;
}


void dfs(int u)
{
    st[u]=true;//注意①:dfs需要判重:因为每个点要保证只能走一次,不能重复走
    printf("%d ",u);//注意②:输出dfs序列:dfs序列是指到达每个点的顺序,要在递归开头遍历(即循环前输出)
    for(Node *i=head[u];i!=NULL;i=i->next)//枚举u的所有邻边
    {
        int j=i->id;//邻边的编号
        if(!st[j])//如果这一点没有搜过
            dfs(j);//继续往下搜
    }

}


int main()
{
    scanf("%d %d",&n,&m);
    while (m -- )
    {
        int a,b;
        scanf("%d %d",&a,&b);
        add(a,b);
    }
    
    for(int i=1;i<=n;i++)//注意③:dfs需要注意图的连通性,有的图可能不联通,所以dfs一定要枚举一遍所有点
    {
        if(!st[i])//如果这个点没有搜过的话
            dfs(i);//就从这个点开始在搜一遍
    }
    
    return 0;
}

到了这里,关于【图的深度优先遍历】输出DFS序列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图的遍历——深度优先搜索(DFS)与广度优先搜索(BFS)(附带C语言源码)

    个人主页:【😊个人主页】 系列专栏:【❤️数据结构与算法】 学习名言:天子重英豪,文章教儿曹。万般皆下品,惟有读书高——《神童诗劝学》 第一章 ❤️ 学前知识 第二章 ❤️ 单向链表 第三章 ❤️ 递归 … 在此之前我们学习过了图的一些基本概念,如同在二叉树

    2024年02月06日
    浏览(65)
  • 数据结构实验6 :图的存储与遍历(邻接矩阵的深度优先遍历DFS和邻接表的广度优先遍历BFS)

    利用邻接矩阵存储无向图,并从0号顶点开始进行深度优先遍历。 输入第一行是两个整数n1 n2,其中n1表示顶点数(则顶点编号为0至n1-1),n2表示图中的边数。 之后有n2行输入,每行输入表示一条边,格式是“顶点1 顶点2”,把边插入图中。 例如: 4 4 0 1 1 3 0 3 0 2 先输出存储

    2024年02月09日
    浏览(63)
  • 数据结构与算法基础-学习-24-图的遍历之DFS(深度优先搜索)和BFS(广度优先搜索)

    目录 一、遍历定义 二、遍历实质 三、DFS 四、BFS 五、宏定义 六、自定义类型 七、函数实现 1、DFS(邻接矩阵实现) 2、DFS(邻接表实现) 3、BFS(邻接矩阵实现) 4、BFS(邻接表实现) 5、打印邻接矩阵遍历顺序  6、打印邻接表遍历顺序 八、遍历算法效率分析 1、DFS 2、BFS 九

    2024年02月03日
    浏览(72)
  • 图的深度优先搜索或 DFS

     图的深度优先遍历(或搜索)类似于 树的深度优先遍历。 这里唯一的问题是,与树不同,图可能包含循环(一个节点可能被访问两次)。为避免多次处理一个节点,请使用布尔访问数组。一个图可以有多个 DFS 遍历。 例子:   输入:  n = 4, e = 6  0 - 1, 0 - 2, 1 - 2, 2 - 0, 2 -

    2023年04月13日
    浏览(68)
  • 对无向图进行邻接矩阵的转化,并且利用DFS(深度优先)和BFS(广度优先)算法进行遍历输出, 在邻接矩阵存储结构上,完成最小生成树的操作。

    目录 一 实验目的 二 实验内容及要求 实验内容: 实验要求: 三 实验过程及运行结果 一 算法设计思路 二 源程序代码 三、截图 四 调试情况、设计技巧及体会 1.掌握图的相关概念。 2.掌握用邻接矩阵和邻接表的方法描述图的存储结构。 3.掌握图的深度优先搜索和广度优

    2024年02月04日
    浏览(54)
  • 深度优先遍历(DFS)

    图的深度优先遍历类似于树的先根遍历(递归)。 树的先根遍历: 图的深度优先遍历 使用的逻辑结构是栈。 如果是非连通图,依旧无法遍历完所有结点。 所以,需要在遍历完一轮结点后,扫描未被标记的结点。 visited数组防止重复访问。 代码实现: 1.空间复杂度 来自函数

    2024年02月10日
    浏览(43)
  • 图(graph)的遍历----深度优先(DFS)遍历

    目录 前言 深度优先遍历(DFS) 1.基本概念  2.算法思想 3.二叉树的深度优先遍历(例子)  图的深度优先遍历 1.图(graph)邻接矩阵的深度优先遍历 思路分析 代码实现 2.图(graph)邻接表的深度优先遍历 思路分析 代码实现 递归代码 非递归代码 3.邻接矩阵和邻接表对比        

    2024年02月04日
    浏览(26)
  • 基于python实现深度优先遍历搜索(DFS)

    1.1 算法介绍 1.2 实验代码 1.3 实验结果 1.4 实验总结 深度优先搜索算法(Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点 v 的所在边都己被探寻过,搜索将回溯到发现节点 v 的那条边的起始节点。这一

    2024年02月03日
    浏览(31)
  • 【算法详解 | DFS算法】深度优先搜索解走迷宫问题 | 深度优先图遍历

    by.Qin3Yu 本文需要读者掌握 结构体 和 栈 的操作基础,完整代码将在文章末尾展示。 特别声明:本文为了尽可能使用简单描述,以求简单明了,可能部分专有名词定义不准确。 栈相关操作可以参考我的往期博文: 【C++数据结构 | 栈速通】使用栈完成十进制数转二四八进制数

    2024年02月03日
    浏览(49)
  • DFS(深度优先遍历、N皇后问题、2N皇后问题)

    目录 一、回溯法与深度优先搜索(DFS) 二、DFS与二叉树的前序遍历 2.1、二叉树的前序遍历 2.2、DFS 全排列  2.3、分析 三、N皇后问题 1. 回溯法: 是一种通过探索所有可能的候选解来找出所有解的算法。如果候选解被确认不是一个解的话(或者至少不是最后一个解),回溯法

    2024年03月21日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包