问题描述

给出一个有向图,输出这个图的一个哈密尔顿回路。

输入格式

输入的第一行包含两个整数n, m,分别表示图的点数和边数。

接下来m行,每行包含两个整数,表示一条边的起点和终点。

输出格式

输出一行,包含一个n个整数,表示一条哈密尔顿回路。如果没有回路输出“No Answer””。

数据规模和约定

1<=n<=20,图中没有重边。

哈密尔顿回路

若图G中一个回路通过且仅通过每一个顶点一次,称这个环为哈密顿回路。

bfs,耗时太久没有通过全部样例,得分 84

package ADV;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;public class ADV319 {static String[] s;static int[] ans = new int[20];static int n,m;static int[] vis;static HashMap<Integer,ArrayList<Integer>> map = new HashMap<>();public static void main(String[] args) throws IOException {BufferedReader in = new BufferedReader(new InputStreamReader(System.in));s = in.readLine().split(" ");n = Integer.valueOf(s[0]);m = Integer.valueOf(s[1]);vis = new int[n+1];for (int i = 0; i < m; i++) {int from,to;s = in.readLine().split(" ");from = Integer.valueOf(s[0]);to = Integer.valueOf(s[1]);if(map.containsKey(from)) {map.get(from).add(to);}else {ArrayList<Integer> L = new ArrayList<Integer>();L.add(to);map.put(from, L);}}if(bfs(1,0,ans)) {//因为是回路,所以从哪个点找都可以for (int i = 0; i < n; i++) {if(i==0) {System.out.print(ans[i]);}else {System.out.print(" "+ans[i]);}}}else {System.out.print("No Answer");}}/*** * @param start 当前从哪个点开始(未进入ans)* @param lv 下一个点应存放的位置* @param ans 保存路径* @return*/static boolean bfs(int start,int lv,int[] ans) {ArrayList<Integer> edges = map.get(start);ans[lv] = start;lv++;vis[start] = 1;if(lv == n) {//找到了哈密尔顿路径,判断是否是回路boolean isLoop = false;for (Integer to : edges) {if(to == 1) {isLoop = true;break;}}if(isLoop) {return true;}else {return false;}}if(edges == null) {//没找到哈密尔顿路径,又不能进入下一点return false;}boolean flag = false;for (Integer to : edges) {//进入下一点if(vis[to]==0) {flag = bfs(to,lv,ans);vis[to]=0;if(flag) {//找到了哈密尔顿回路,立刻返回return flag;}}}return flag;}
}

蓝桥杯 哈密尔顿回路 Java相关推荐

  1. java哈密尔顿回路算法,用回溯方法求哈密尔顿回路——java求解

    // 哈密尔顿回路问题 public class Hamilton { // 图中顶点个数为n,图的邻接矩阵为c[][],存放回路的顶点序号x[],在这里,n个顶点的标号是:0,1,2,...,n-1 ...

  2. 什么是哈密尔顿回路/路径?

    一:哈密尔顿回路与哈密尔顿路径 1859 年,爱尔兰数学家哈密尔顿(Hamilton)提出了一个"周游世界"的游戏: 在一个正十二面体的二十个顶点上,标注了伦敦,巴黎,莫斯科等世界 ...

  3. 欧拉回路和哈密尔顿回路

    "哈密尔顿回路问题"与"欧拉回路问题"看上去十分相似,然而却是完全不同的两个问题."哈密尔顿回路问题"是访问除原出发结点以外的每个结点一次且 ...

  4. 2022年第十三届蓝桥杯大赛软件省赛Java学B组试题

    第十三届蓝桥杯大赛软件省赛Java学B组试题 一.试题截图 1. 星期计算 这道题是可以直接用笔算起来的,我算出来的答案是5,(2022整除7 余6,六天后就是星期五)但目前官方答案还不知道是什么? ...

  5. 第十三届蓝桥杯模拟赛第二期JAVA组个人题解

    第十三届蓝桥杯模拟赛第二期JAVA组个人题解 文章目录 第十三届蓝桥杯模拟赛第二期JAVA组个人题解 题目1 题目2 题目3 题目4 题目5 题目6 题目7 题目8 题目9 题目10 题目1 小蓝的I ...

  6. 蓝桥杯练习系统之基础训练Java版(2-26)—— 报时助手

    蓝桥杯练习系统之基础训练Java版(2-26)-- 报时助手 **难度等级:普通****关键字:字符串 条件判断** 问题描述: 给定当前的时间,请用英文的读法将它读出来.时间用时h和分m表示,在英文 ...

  7. 蓝桥杯练习系统-入门训练java版

    蓝桥杯练习系统-入门训练:http://lx.lanqiao.cn/problemset.page?code=BEGIN-&userid=301077 package 蓝桥杯系统入门训练;im ...

  8. 第十三届蓝桥杯大赛软件类决赛Java大学B组C题——左移右移

    [问题描述] 小蓝有一个长度为 N 的数组,初始时从左到右依次是 1, 2, 3, . . . N. 之后小蓝对这个数组进行了 M 次操作,每次操作可能是以下 2 种之一: 左移 x,即把 x 移动到 ...

  9. 第六届蓝桥杯大赛个人赛省赛Java B组真题

    文章目录 第六届蓝桥杯大赛个人赛省赛Java B组真题 1. 三角形面积(结果填空) 2. 立方自变身(结果填空) 3. 三羊献瑞(结果填空) 4. 循环节长度(代码填空) 5. 九数组分数(代码填空 ...

最新文章

  1. ELK日志分析平台搭建全过程
  2. 几何分布的期望和方差
  3. systemctl和service
  4. C基础--字符串操作函数(strlen,strcpy,strcmp,strcat,strstr,strtok,strchr)
  5. 安全服务如何为SD-WAN增值?—Vecloud
  6. MyBatisPlus中通用CRUD的updateById方法
  7. Qt工作笔记-使用Qt中QProcess与iostream中system调用外部进程
  8. centos7忘记root密码,重置
  9. 【U盘量产工具】windows无法完成格式化——芯邦主控CBM2098S
  10. python单向认证_使用Python进行单向方差分析的四种方法
  11. 基于聚集诱导荧光探针细胞膜/细胞膜表面GABA受体荧光探针/上汞离子荧光探针的研究
  12. Uber数据泄露事件本可以使用区块链…
  13. 双软认证企业税收优惠政策
  14. j3455linux网卡不亮,最新J3455主板直接安装黑群晖的若干问题解决办法
  15. Maximum Likelihood (MLE) Maximum a posteriori (MAP)的分別
  16. 搜索专题——迷宫寻宝
  17. 单片机-6位数码管动态时间扫描程序,具有时分秒
  18. RHCE培训课程报道处
  19. 专利申请号有误请核实请输入9到13位数字
  20. android视频开发倍速播放,调整视频播放速度

热门文章

  1. python之items()的用法
  2. 北京外雇大学计算机系,北京大学计算机系 代亚非
  3. mysql数据库source命令导入sql文件
  4. HTML input 默认值设置
  5. linux pstree命令
  6. 安全网站相关,漏洞修复
  7. tried to access field com.mysql.cj.CharsetMapping.COLLATION_INDEX_TO_COLLATION_NAME from class io.de
  8. Soft Actor-Critic(SAC算法)
  9. 国内备案有什么好处?为什么国外服务器不用备案?
  10. (HihoCoder - 1049)后序遍历