Java实现无向图的欧拉回路判断问题
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实现无向图的欧拉回路判断问题的更多相关文章
- 算法笔记_141:无向图的欧拉回路判断问题(Java)
目录 1 问题描述 2 解决方案 1 问题描述 Problem Description 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个图,问是否存在欧拉回 ...
- hdu 1878 无向图的欧拉回路
原题链接 hdu1878 大致题意: 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个无向图,问是否存在欧拉回路? 思路: 无向图存在欧拉回路的条件:1.图是连 ...
- SGU---101 无向图的欧拉回路
题目链接: https://cn.vjudge.net/problem/SGU-101 题目大意: 给定你n张骨牌,每张牌左右两端有一个数字,每张牌的左右两端数字可以颠倒,找出一种摆放骨牌的顺序,使得 ...
- Java程序流程控制:判断结构、选择结构、循环结构
本文内容: 判断结构 if 选择结构 switch 循环结构 while do-while for for each break.continue return 首发时间:2017-06-22 21: ...
- “全栈2019”Java多线程第九章:判断线程是否存活isAlive()详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- 为什么java里面经常作List判断的时候,既要判断list不为null,又要判断size>0呢?
没有考虑到具体的问题上面,我们单纯的来讲: 为什么java里面经常作List判断的时候,既要判断list不为null,又要判断size>0呢? list == null 说明list没有初始化( ...
- 算法笔记_143:构造无向图的欧拉回路(Java)
目录 1 问题描述 2 解决方案 1 问题描述 具体链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Item ...
- 算法笔记_142:无向图的欧拉回路求解(Java)
目录 1 问题描述 2 解决方案 1 问题描述 John's trip Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8 ...
- 算法笔记_147:有向图欧拉回路判断应用(Java)
目录 1 问题描述 2 解决方案 1 问题描述 Description In order to make their sons brave, Jiajia and Wind take them t ...
随机推荐
- 对background: url("~assets/img/common/collect.svg") 0 0/14px 14px 的理解
需求:给收藏数字前面通过::before伪元素添加图标 相关代码: .goods-info .collect { position: relative; } .goods-info .collect: ...
- RabbitMQ及延时队列
一.简介 我用过RabbirMQ的发布订阅模式,以及一对一的延迟队列. 1.RabbitMQ的有消息确认机制,消费一条则队列中少一条,也有对应的消费到消息及认为是消费成功这样的模式,一般使用前者. 发 ...
- 类linux 系统上端口被占用
好几次遇到这问题,明明Ctrl+C退出了node,但是下次启动的时候总是会报错: listen EADDRINUSE :::80 之类的. 这时候可能是被占用,也可能是上次进程没有真的退出. ps - ...
- Flutter仿掘金点赞效果
老孟导读:今天分享一下如何实现掘金点赞效果,这不仅仅是一篇技术文章,还是一篇解决问题思路的文章,遇到一个需求时,如何拆分需求,然后一步一步实现,这个过程比单纯的技术(此文)更有含金量. 先来看一下掘金 ...
- nginx四种均衡策略
1.基于轮询的均衡策略: 轮询嘛,就是说对进到nginx的request按照遍历的方式进行分发,如果request 1 分发到 Server A,那么request 2将被分发到 Server B,. ...
- ubuntu 下安装 mysql 启动报错:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
环境: ubuntu LTS 18.04.1 mysql Ver 14.14 Distrib 5.7.29, for Linux (x86_64) 初探 linux,按照如下安装完mysql sudo ...
- SD.Team主题形象小人偶
W e ♥ S D ♫ ♪ 咔咔咔~可能源码冲突会造成小人偶光头 :)
- 值得注意的Java基础知识
1)Java语言中默认(即缺省没写出)的访问权限,不同包中的子类不能访问. 中有4中访问修饰符:friendly(默认).private.public和protected. public :能被所有的 ...
- python argparse总结
python2.7废除optparse,原因:http://code.google.com/p/argparse/ 说了半天好像是重开了个小号练级 抓紧写下来一会又得忘了 用法: import arg ...
- 移动端适配-rem(新)
概念 对于移动端开发来说,无可避免的就是直面各种设备不同分辨率和不同DPR(设备像素比)的问题,在此忽略其他兼容性问题的探讨. 移动端像素 设备像素(dp),也叫物理像素.指设备能控制显示的最小物理单 ...