目录

1 问题描述

2 解决方案

 


1 问题描述

Problem Description
欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?
 
Input
测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M;随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号)。当N为0时输入结
束。
 
Output
每个测试用例的输出占一行,若欧拉回路存在则输出1,否则输出0。
 
Sample Input
3 3
1 2
1 3
2 3
3 2
1 2
2 3
0
 
Sample Output
1
0

2 解决方案

具体代码如下:

  1. package com.liuzhen.practice;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Scanner;
  5.  
  6. public class Main {
  7. public static int MAX = 1000;
  8. public static int[][] map = new int[MAX][MAX]; //输入图
  9. public static ArrayList<Integer> result = new ArrayList<Integer>(); //用于存放最终输出结果
  10.  
  11. //判断给定图的每个顶点的度是否均为偶数
  12. public boolean judge(int[] degree) {
  13. for(int i = 0;i < degree.length;i++) {
  14. if(degree[i] % 2 != 0)
  15. return false;
  16. }
  17. return true;
  18. }
  19.  
  20. //使用BFS遍历,判断给定图是否为连通图
  21. public boolean bfs(int n) {
  22. boolean[] used = new boolean[n];
  23. ArrayList<Integer> list = new ArrayList<Integer>();
  24. list.add(0);
  25. used[0] = true;
  26. while(!list.isEmpty()) {
  27. int temp = list.get(0);
  28. list.remove(0);
  29. for(int i = 0;i < n;i++) {
  30. if(!used[i] && map[temp][i] != 0) {
  31. used[i] = true;
  32. list.add(i);
  33. }
  34. }
  35. }
  36. for(int i = 0;i < n;i++) {
  37. if(used[i] == false)
  38. return false;
  39. }
  40. return true;
  41. }
  42.  
  43. public static void main(String[] args) {
  44. Main test = new Main();
  45. Scanner in = new Scanner(System.in);
  46. while(true) {
  47. int n = in.nextInt(); //输入图的顶点数
  48. if(n == 0)
  49. break;
  50. int m = in.nextInt(); //输入图的边数目
  51. int[] degree = new int[n]; //用于计算输入图的每个顶点的度
  52. for(int i = 0;i < m;i++) {
  53. int a = in.nextInt();
  54. int b = in.nextInt();
  55. map[a - 1][b - 1] = 1;
  56. map[b - 1][a - 1] = 1;
  57. degree[a - 1]++;
  58. degree[b - 1]++;
  59. }
  60. if(test.judge(degree) && test.bfs(n))
  61. result.add(1);
  62. else
  63. result.add(0);
  64. }
  65. for(int i = 0;i < result.size();i++)
  66. System.out.println(result.get(i));
  67. }
  68. }

运行结果:

  1. 3 3
  2. 1 2
  3. 1 3
  4. 2 3
  5. 3 2
  6. 1 2
  7. 2 3
  8. 0
  9. 1
  10. 0

参考资料:

1. 欧拉回路

算法笔记_141:无向图的欧拉回路判断问题(Java)的更多相关文章

  1. 算法笔记_142:无向图的欧拉回路求解(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 John's trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8 ...

  2. 算法笔记_147:有向图欧拉回路判断应用(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 Description In order to make their sons brave, Jiajia and Wind take them t ...

  3. Java实现无向图的欧拉回路判断问题

    1 问题描述 Problem Description 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个图,问是否存在欧拉回路? Input 测试输入包含若干测试 ...

  4. 算法笔记_044:表达式计算求值(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的 ...

  5. 算法笔记_052:蓝桥杯练习Multithreading(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 现有如下一个算法: repeat ni times yi := y y := yi+1 end repeat 令n[1]为你需要算加法的第 ...

  6. 算法笔记_180:历届试题 国王的烦恼(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛.两个小岛间可能存在多座桥连接.然而,由于海水冲 ...

  7. 算法笔记_149:图论之桥的应用(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 1310 One-way traffic In a certain town there are n intersections connected ...

  8. 算法笔记_139:二分图的最大权匹配(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 何为二分图的最大权匹配问题? 最大权二分匹配问题就是给二分图的每条边一个权值,选择若干不相交的边,得到的总权值最大. 2 解决方案 对于此问题的讲解 ...

  9. 算法笔记_133:最大连续乘积子数组(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力法 2.2 动态规划法   1 问题描述 给定一个浮点数组,任意取出数组中的若干个连续的数相乘,请找出其中乘积最大的子数组. 2 解决方案 2.1 蛮力法 ...

随机推荐

  1. BZOJ1001: [BeiJing2006]狼抓兔子 (最小割转最短路)

    浅析最大最小定理在信息学竞赛中的应用---周东 ↑方法介绍 对于一个联通的平面图G(满足欧拉公式) 在s和t间新连一条边e; 然后建立一个原图的对偶图G*,G*中每一个点对应原图中每一个面,每一条边对 ...

  2. 【2-SAT】【DFS】【分类讨论】Gym - 101617K - Unsatisfying

    题意:给你一张2-SAT,问你加至少几句a V b(不能用非运算)这样的语句,使得其无法全为真. 如果最开始没有左右两项都含非运算的析取表达式,则无解,因为显然你可以对每一项的不含非的那项规定为真,使 ...

  3. 【洛谷】P1631: 序列合并

    P1631 序列合并 题目描述 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N2个和,求这N2个和中最小的N个. 输入输出格式 输入格式: 第一行一个正整数N: 第二行N个整数Ai​ ...

  4. ExifInterface针对照片的使用

    ExifInterface是保存照片信息的,那么我们在有需要的时候就可以通过这类,来获取照片的一些数码参数来做适当来逻辑处理,比较典型的案例就是android有的机型拍照或者选择照片后,照片可能会被旋 ...

  5. Linux下ip route、ip rule、iptables的关系(转)

    1.基础知识 1.1 路由 (Routing) 1.1.1 路由策略 (使用 ip rule 命令操作路由策略数据库) 基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目 ...

  6. Java Http连接中(HttpURLConnection)中使用代理(Proxy)及其验证(Authentication)

    使用Java的HttpURLConnection类可以实现HttpClient的功能,而不需要依赖任何其他类库.所有有时候大家就直接使用它来完成一些简单(或复杂)的功能.但是你活在伟大的{print ...

  7. Spartan-6 FPGA Configuration

    These configuration pins serve as the interface for a number of different configuration modes: • JTA ...

  8. systemd-udevd

    描述:systemd-udevd是监听内核发出的设备事件,并根据udev规则处理每个事件. 选项: --daemon 脱离控制台,并作为后台守程运行. --debug 在标准错误上打印调试信息 --c ...

  9. 插值技术之Bezier插值(1) -- Bezier Curve

    作者:i_dovelemon 来源:CSDN 日期:2015 / 7 / 11 主题:Interpolate,Bezier Curve 引言 在游戏开发中.诸如动画系统.路径计算等等操作,都会遇到对数 ...

  10. (转)媒体格式分析之flv -- 基于FFMPEG

    本来是应该先写一个媒体文件格式的简单讲解的,还没来得及写,以后再写.今天就先根据ffmpeg的flv.c的flv_demux这个结构体来讲解一下当前比较流行的媒体格式flv. FLV 是FLASH V ...