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 解决方案

package com.liuzhen.practice;

import java.util.ArrayList;
import java.util.Scanner; public class Main {
public static int MAX = 1000;
public static int[][] map = new int[MAX][MAX]; //输入图
public static ArrayList<Integer> result = new ArrayList<Integer>(); //用于存放最终输出结果 //判断给定图的每个顶点的度是否均为偶数
public boolean judge(int[] degree) {
for(int i = 0;i < degree.length;i++) {
if(degree[i] % 2 != 0)
return false;
}
return true;
} //使用BFS遍历,判断给定图是否为连通图
public boolean bfs(int n) {
boolean[] used = new boolean[n];
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(0);
used[0] = true;
while(!list.isEmpty()) {
int temp = list.get(0);
list.remove(0);
for(int i = 0;i < n;i++) {
if(!used[i] && map[temp][i] != 0) {
used[i] = true;
list.add(i);
}
}
}
for(int i = 0;i < n;i++) {
if(used[i] == false)
return false;
}
return true;
} public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
while(true) {
int n = in.nextInt(); //输入图的顶点数
if(n == 0)
break;
int m = in.nextInt(); //输入图的边数目
int[] degree = new int[n]; //用于计算输入图的每个顶点的度
for(int i = 0;i < m;i++) {
int a = in.nextInt();
int b = in.nextInt();
map[a - 1][b - 1] = 1;
map[b - 1][a - 1] = 1;
degree[a - 1]++;
degree[b - 1]++;
}
if(test.judge(degree) && test.bfs(n))
result.add(1);
else
result.add(0);
}
for(int i = 0;i < result.size();i++)
System.out.println(result.get(i));
}
}

运行结果:

3
2
3
3
2
2
3
1

Java实现无向图的欧拉回路判断问题的更多相关文章

  1. 算法笔记_141:无向图的欧拉回路判断问题(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 Problem Description 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个图,问是否存在欧拉回 ...

  2. hdu 1878 无向图的欧拉回路

    原题链接 hdu1878 大致题意: 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个无向图,问是否存在欧拉回路? 思路: 无向图存在欧拉回路的条件:1.图是连 ...

  3. SGU---101 无向图的欧拉回路

    题目链接: https://cn.vjudge.net/problem/SGU-101 题目大意: 给定你n张骨牌,每张牌左右两端有一个数字,每张牌的左右两端数字可以颠倒,找出一种摆放骨牌的顺序,使得 ...

  4. Java程序流程控制:判断结构、选择结构、循环结构

    本文内容: 判断结构 if 选择结构 switch 循环结构 while do-while for for each break.continue return 首发时间:2017-06-22 21: ...

  5. “全栈2019”Java多线程第九章:判断线程是否存活isAlive()详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  6. 为什么java里面经常作List判断的时候,既要判断list不为null,又要判断size>0呢?

    没有考虑到具体的问题上面,我们单纯的来讲: 为什么java里面经常作List判断的时候,既要判断list不为null,又要判断size>0呢? list == null 说明list没有初始化( ...

  7. 算法笔记_143:构造无向图的欧拉回路(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 具体链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Item ...

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

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

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

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

随机推荐

  1. Zkeys:低门槛、易操作的智能云管理系统

    ZKEYS系统是一个功能强大的智能化管理系统,目前国内最大的IDC业务管理系统之一.功能模块涵盖用户中心系统.财务系统.工单系统.备案系统和云服务器.服务托管器.虚拟主机等产品的弹性在线购买及及时开通 ...

  2. HDU 2004 (水)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2004 题目大意: 给你成绩让你根据成绩打分解题思路: 简单的if...else 应用 需要注意是,if ...

  3. OpenCV开发笔记(五十六):红胖子8分钟带你深入了解多种图形拟合逼近轮廓(图文并茂+浅显易懂+程序源码)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  4. svn简单用法

    svn checkout  .. dir  ,选rw 的那个目录 svn up( update) svn add .. svn commit .. -m "add sth"  这里 ...

  5. 存储系列之 RAID技术原理简介

    引言:RAID技术是现代大规模存储的基础,“基础(技术)是拿来革命的”.我查raid相关资料时,查布尔运算,竟然一路查到“香农原理”,这不是有个视频中HW的任总提到的吗,多基础的东西,任总却毫不含糊, ...

  6. BZOJ1077 并查集

    1077: [SCOI2008]天平 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 416  Solved: 224[Submit][Status][ ...

  7. CF894B Ralph And His Magic Field

    题目链接:http://codeforces.com/contest/894/problem/B 题目大意: 往一个 \(n \times m\) 的网格中填数字 \((1 \le n,m \le 1 ...

  8. Git创建子分支,合并分支并提交到Gitee码云

    Git合并分支后,需要将子分支提交到git仓库,这个时候就需要单独提交子分支,其步骤如下: 先创建子分支,并包含最新当前分支下的修改数据 git checkout -b sonBranch 将新分支内 ...

  9. VMware Workstation如何修改弹出释放快捷键

    VMware Workstation默认使用Ctrl+Alt键就可以将鼠标从虚拟机脱离出来. 但有时这2个键可能会和其他软件的快捷键冲突,这时候如何设置快捷键呢: 打开WMware Workstati ...

  10. 解决python引包错误

    # coding=utf8# date = 2019/12/23 19:54# 清白丶之年__照林""" # Solve Import Lib Error Add Som ...