题目:哈密顿通路是指,在一个无向图中,存在一条经过图中每一个点,且仅经过一次的通路,若这条通路形成了闭合回路,则称这条回路为哈密顿回路,存在哈密顿回路的图称为哈密顿图。现给出无向图G的边,要求判断无向图G中是否存在哈密顿通路,且判断其是否为哈密顿图。

Input:

第一行为节点数n

第二行到倒数第二行为每一条边的信息,每行有两个数字,以空格分开,代表节点编号

最后一行为1-n以外的两个数字,表示输入结束

Output:

“存在哈密顿通路”或“不存在哈密顿通路”,换行

“是哈密顿图”或“不是哈密顿图”

输入样例1

5

1 2

2 3

3 4

4 5

5 1

0 0

输出样例1

存在哈密顿通路

是哈密顿图

输入样例2

5

1 2

1 3

2 3

2 4

2 5

3 4

3 5

0 0

输出样例2

存在哈密顿通路

不是哈密顿图

解题分析:

先使用一个二维数组存储无向图G的关系矩阵,然后使用广度优先搜索算法,使用变量t存储已经经过的节点。对于每一个节点,若存在未经过的与其关联的节点,则移动到此节点再次搜索,如不存在此节点,则返回。

在每一个节点处进行判断,若t=n,则已经无重复地通过了全部节点,即存在哈密顿通路,在此基础上,若t=n时,所处的点与1号点关联,则形成了哈密顿回路,即为哈密顿图。

实现代码:

#include<iostream>

#include<cstring>

using namespace std;

int n,t=0,access=0,circuit=0;

//n为节点数,t为经过节点数,access表示是否为哈密顿通路,circuit表示是否为哈密顿图

int rel[100][100]={0};

int visited[100];

//rel表示无向图G, visited表示经过的节点编号

bool judge(int num){

//judge函数判断num号节点是否存在未经过的关联节点

for(int i=1;i<=n;i++){

if(rel[num][i]==1&&visited[i]==0) return true;

}

return false;

}

void search(int start){

//search函数进行递归,搜索连通图中每一个节点

int i;

t++;

if(t==n) access=1;

//判断哈密顿通路

if(t==n&&rel[start][1]==1) circuit=1;

//判断哈密顿回路

if(!judge(start)) return;

//不存在未经过的关联节点时结束递归

for(i=1;i<=n;i++){

if(rel[start][i]==1&&visited[i]==0){

visited[i]=1;

search(i);

//存在未经过关联节点时继续递归

visited[i]=0;

t--;

//重置经过节点编号与经过节点数

}

}

}

int main() {

cin>>n;

memset(visited,0,sizeof(visited));

//将数组初始化置为未经过

int a,b;

//a,b表示每一条边的两端节点编号

while(1){

//读入无向图G关系矩阵

cin>>a>>b;

if(a>0&&b>0&&a<=n&&b<=n){

rel[a][b]=1;

rel[b][a]=1;

}

else break;

}

visited[1]=1;

//从1号节点开始搜索

search(1);

if(access==1) cout<<"存在哈密顿通路"<<endl;

//输出结果

else cout<<"不存在哈密顿通路"<<endl;

if(circuit==1) cout<<"是哈密顿图"<<endl;

else cout<<"不是哈密顿图"<<endl;

return 0;

}

基于广度优先搜索的哈密顿图的判断算法相关推荐

  1. 广度优先搜索_计算机入门必备算法——广度优先遍历搜索

    1.  序言 又很久没有学习了,上次学到哈希表又称散列表的相关知识,这次我们学习一种新的数据结构来建立网络模型.这种数据结构被称作图.首先,我们先应该先了解一下什么是图,其次学习第一种图的算法,这种图 ...

  2. 【CV系列】基于直方图的白天夜晚场景判断算法

    DATE: 2019-7-6 简单的白天夜晚场景判断算法: 基于直方图,不够准确,容易出现误判,对于那些亮度很高的夜晚场景或者亮度很低的白天场景会出现误判. int day_night_estimat ...

  3. 力扣入门级广度优先搜索/遍历刷题小结

    刷这些题时死掉的脑细胞是我当年在<线性代数>和<概率论与数理统计>课上没学明白时苟活下来的( 这几题基本是抄作业了,但我发现官方题解写的也很绕,都不知道是我天然看到这类题就头晕 ...

  4. 限界分支法(实际上没有剪枝,介绍的是广度优先搜索):01背包问题,队列实现方式(FIFO)

    限界分支法:队列实现方式 前面已经介绍过限界分支法大部分是基于广度优先搜索,广度优先搜索一般借助于队列实现,剪枝的情况可以借助于优先级队列. 实现如下: #%% class FIFO_01_Pack: ...

  5. 复现一篇分布式装配置换流水车间调度问题的代码——基于回溯搜索的超启发式算法

    复现一篇分布式装配置换流水车间调度问题的代码--基于回溯搜索的超启发式算法 摘要 算法框架 说明 代码 测试类 算法主体 Assignment Heuristics Individual Method ...

  6. a - 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历_数据结构--图

    故事凌 今天 基本知识点 图可说是所有数据结构里面知识点最丰富的一个, 自己笨的知识点如下: 阶(oRDER), 度: 出度(out-Degree), 入度(in-Degree) 树(Tree), 森 ...

  7. 广度优先算法_算法浅谈——走迷宫问题与广度优先搜索

    本文始发于个人公众号:TechFlow,原创不易,求个关注 在之前周末LeetCode专栏当中,我们详细描述了深度优先搜索和回溯法,所以今天我们继续这个话题,来和大家聊聊搜索算法的另一个分支,广度优先 ...

  8. 无向图、深度优先搜索(无向图)、广度优先搜索(无向图)、无向图路径查找(基于深度优先搜索)

    一.无向图 1.1 图的相关术语 相邻顶点: 当两个顶点通过一条边相连时,我们称这两个顶点是相邻的,并且称这条边依附于这两个顶点. 度: 某个顶点的度就是依附于该顶点的边的个数. 子图: 是一幅图的所 ...

  9. JS算法:广度优先搜索(BSF)的理解

    广度优先搜索方法的实现 (基于<学习JavaScript数据结构与算法>补充学习) 实现步骤如下 1.用initializeColor函数来将color数组初始化为白色:也就是将每个节点初 ...

  10. java广度优先算法,算法之广度优先搜索

    一.引言 上一次介绍的算法是深度优先搜索 这次我们来研究一下广度优先搜索,看看怎么理解以及写出这个算法 这个算法需要数据结构的基础--队列,如果没有这个基础的同学去恶补一下. 二.小小问题 Q:在一个 ...

最新文章

  1. 局域网通知系统(消息群发)
  2. matlab pareto 升级版
  3. 快速开发平台网格部件合并单元格。
  4. 人生路上对我影响最大的三位老师
  5. CNN看清世界——浅谈四个经典网络的差异
  6. java 课程设计数据库_人事管理系统(java数据库课程设计)+SQL数据库
  7. 为啥有人说每个程序员都应该这学习5种编程语言?
  8. HandlerMethodArgumentResolver 参数解析器
  9. 【笔记+代码】网格搜索-GridSearchCV
  10. 致远SPM之金蝶K3集成解决方案
  11. 深度 | 蚂蚁金服DASFAA论文带你深入了解GBDT模型
  12. 2016红帽年度创新大奖榜单揭晓
  13. KK 在 68 岁生日时给出的 68 条建议[翻译]#yyds干货盘点#
  14. 6782. 2020.08.06【NOI2020】模拟T3 乌拉乌拉
  15. nginx 使用配置解释
  16. Core Data概述
  17. maven 配置多个仓库
  18. 【推荐系统系列6】ALS推荐算法原理
  19. 微软新编程字体开源,用着一不小心就骂人了
  20. [人脸对齐] SAN:Style Aggregated Network for Facial Landmark Detection 论文阅读

热门文章

  1. 【VFB】复制VB代码(VB与FB的差异)(VFB教程3-6)
  2. Ubuntu完美安装QQ
  3. 《你是三月的小桨》光剑
  4. 网络编程在线英英词典之客户端代码框架搭建(一)
  5. Android9输入法留白配置,拇指于键盘间游离 2015安卓输入法横评
  6. 大型网站技术架构演进与性能优化
  7. java我行我素购物系统_用java怎么编写 我行我素shopping购物管理体统
  8. python打开360浏览器_使用python3.7 的pycharm selenium自动化测试中启动360浏览器、360极速浏览器的方法...
  9. Windows Server 2012 AD域管理创建
  10. “元宇宙”是个啥?都有哪些大招?