1. 问题简介:

输入样例:

5 7

2 1

3 1

4 1

4 2

5 2

5 3

5 4

1

输出样例:

Path 1: 1 2 4 5 3 1

Path 2: 1 3 5 2 4 1

Path 3: 1 3 5 4 2 1

Path 4: 1 4 2 5 3 1

  1. 设计思路:(本题参考:https://blog.csdn.net/weixin_51165679/article/details/121469537?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-121469537-blog-121443088.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-121469537-blog-121443088.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=7)

算法简介:深度优先遍历(Depth First Search,DFS)算法是指在图或树中,朝着一个节点的子节点进行遍历,直达满足结束要求再进行回溯。

设计思路:依据算法的基本思想,利用递归来实现DFS算法。DFS的核心思想是一直往下遍历。比如在二叉树中,从根节点往下,遍历更节点左节点i。再遍历i的子节点k,直到遍历到叶子节点,才完成一次遍历的结果。然后回溯到叶子节点的上一个节点x,再继续遍历x的下一个子节点。上述重复的过程可利用递归函数实现。

  1. 代码:

/*dfs算法之哈密顿图*/
#include <iostream>
#include <vector>using namespace std;const int maxn = 15;
//记录两点之间是否有通路,graph[v1][v2]=true表示v1、v2间存在通路
bool Graph[maxn][maxn] = { false };
bool vis[maxn] = { false };             //记录顶点是否被访问int n, e;                             //顶点和边的条数
int s;                                 //给定的路径起点vector<int>path;                     //保存路径的数组
int cnt = 0;                         //记录回路的数量void dfs(int v, int number)
{if (v==s&&number==n)        //当所有的节点都被访问并回到起点时,哈密顿图形成{cnt++;cout << "path" << cnt << ":";for (int x : path){cout << " " << x;}cout << endl;return;}for (int i = 1; i <= n; i++){if (!vis[i] && Graph[v][i])    //节点i未被访问,并v和i之间存在路径{vis[i] = true;path.push_back(i);dfs(i, number + 1);    //递归节点i的下一个子节点path.pop_back();        //将当递归完成后,i的所有的子节点都被遍历,将i出栈vis[i] = false;    //回溯,重置节点的状态}}
}int main()
{cin >> n >> e;while (e--){int v1, v2;cin >> v1 >> v2;Graph[v1][v2] = Graph[v2][v1] = true;}cin >> s;path.push_back(s);dfs(s, 0);return 0;
}
  1. 运行结果:

  1. 总结:dfs算法的理解是从一个节点开始,一直往下遍历其子节点,直到满足结束条件。其核心是递归和回溯。需要对递归过程有一定的了解,递归往下的过程即是遍历子节点的过程,递归往上的过程即是回溯的过程。将哈密顿图中的每个与节点i相连的节点当作其子节点,利用dfs可以完成哈密顿图的遍历过程。

dfs算法解决哈密顿图问题相关推荐

  1. DFS算法解决数独问题

    DFS算法解决数独问题 一,情景描述   一天晚自习,看到女朋友在旁边玩数独,便想着不如用个算法帮助她快速通关.毕竟,我想以后能成为一个AI算法工程师,所以现在不管是什么算法,多写点总归是有好处的. ...

  2. UA SIE545 优化理论基础5 搜索与整数规划1 DFS算法

    UA SIE545 优化理论基础5 搜索与整数规划1 DFS算法 DFS方法基础 邮票问题 这部分的主要目标是建立求解整数规划的方法,早期解决整数规划需要穷举,后来人们把搜索技术应用到整数规划中,极大 ...

  3. 利用匈牙利算法Hopcroft-Karp算法解决二分图中的最大二分匹配问题 例poj 1469 COURSES...

    首先介绍一下题意:已知,有N个学生和P门课程,每个学生可以选0门,1门或者多门课程,要求在N个学生中选出P个学生使得这P个学生与P门课程一一对应. 这个问题既可以利用最大流算法解决也可以用匈牙利算法解 ...

  4. DFS算法原理及其具体流程,包你看一遍就能理解

    目录 写在前面 DFS算法 所解决的问题 所需要的数据结构 代码结构及解释 方法一:递归 解释 递归dfs总结 方法二:栈 解释 栈dfs总结 写在前面 因为楼主也是刚开始刷leetcode,所以下面 ...

  5. 【2018.07.29】(深度优先搜索/回溯)学习DFS算法小记

    参考网站:https://blog.csdn.net/ldx19980108/article/details/76324307 这个网站里有动态图给我们体现BFS和DFS的区别:https://www ...

  6. Python利用A*算法解决八数码问题

    资源下载地址:https://download.csdn.net/download/sheziqiong/86790565 资源下载地址:https://download.csdn.net/downl ...

  7. 仙人掌相关问题的解法(1)-DFS树解决仙人掌DP问题,圆方树

    前言 有难度的仙人掌题在近几年也只是在国家集训队水平的比赛里才会出现. 不过,这不是说仙人掌对国集水平以下的选手意义不大: 首先,仙人掌暴力 DP 问题难度并不大,在省选. NOI 甚至 NOIP 中 ...

  8. 八皇后BFS算法、DFS算法、A*算法代码理解

    代码参考了Python:DFS/BFS/UCS解决八皇后问题_流动的风与雪的博客-CSDN博客 和Python:GBF/A*算法解决八皇后问题_流动的风与雪的博客-CSDN博客 但是我花了两天时间才看 ...

  9. Dijkstra算法修改 + dfs算法的总结

    Dijkstra + dfs 参考Dijkstra算法的改进 前提:Dijkstra算法的思路和实现请看最短路径算法之二:Dijkstra总结 介绍 Dijkstra算法和dfs算法的结合主要解决最短 ...

最新文章

  1. c++ socket 结构体
  2. Lua中的字符串函数库
  3. Shell之/bin/bash脚本的基础实战
  4. 全国计算机等级考试收费不一样,2018年北京全国计算机等级考试收费标准
  5. SAP BTP SDK for Android 已经支持 Kotlin 了
  6. ubuntu14.04设置静态IP
  7. jquery选择器案例分享
  8. php 正则获取html标签,php正则取嵌套html标签
  9. 大数据计算存储资源池_管家实践:轻松玩转大数据计算服务
  10. Python爬虫有什么用,网友纷纷给出自己的答案,爬虫能做的还是很多的
  11. python(day04)
  12. find和xargs
  13. Sql Server 2012 Enterprise Edition 企业版 迅雷 下载地址
  14. 【Auto Proxy】自研Go语言自动代理工具软件
  15. 丘成桐:如何学好微分几何
  16. Tri Tiling·递推
  17. B - 最少硬币问题
  18. java自定义注解处理器_Android自定义注解处理器
  19. Studing Day1 - python基础1
  20. 码农在使用人脸识别开发套件中的硬件主板如何调用底层接口步骤

热门文章

  1. 计算机控制河南工业大学,大学计算机控制技术实验报告河南工业大学3.docx
  2. 21.项目部署-usgi
  3. 特种车辆的机架式聚合路由器通信方案
  4. 6.36③ 若已知两棵二叉树B1和B2皆为空,或者皆 不空且B1的左、右子树和B2的左、右子树分别相似, 则称二叉树B1和B2相似。试编写算法,判别给定两 棵二叉树是否相似。
  5. O2OA V4 Build 11.02 发布! 全功能分布式企业信息化办公平台
  6. 【三维目标检测】FCAF3D(二)
  7. 蓝桥杯真题:正则问题
  8. nodejs文件下载及上传
  9. php读取excel指定工作簿,php读取excel,excel下多个个工作表,该怎么读取呢?
  10. 分享信号处理相关的几部名著