博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法笔记_141:无向图的欧拉回路判断问题(Java)
阅读量:6760 次
发布时间:2019-06-26

本文共 2368 字,大约阅读时间需要 7 分钟。

目录

 


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
result = new ArrayList
(); //用于存放最终输出结果 //判断给定图的每个顶点的度是否均为偶数 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
list = new ArrayList
(); 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 31 21 32 33 21 22 3010

 

 

 

 

 

参考资料:

   1. 

 

转载地址:http://irfeo.baihongyu.com/

你可能感兴趣的文章
iOS应用开发,全局强制竖屏,部分页面允许旋转的处理
查看>>
Linux运维教程
查看>>
Git学习
查看>>
问到的问题
查看>>
iOS网络模块优化(失败重发、缓存请求有网发送)
查看>>
经典SQL语句大全(绝对的经典)
查看>>
中小研发团队架构实践之总体架构设计
查看>>
PDO中获取结果集
查看>>
实用主义性能测试
查看>>
oozie开发注意事项
查看>>
【Tomcat】linux下实时查看tomcat运行日志
查看>>
HDU 5212 Code
查看>>
yarn使用
查看>>
Hadoop之 MapReducer工作过程
查看>>
CPU监控
查看>>
MongoDB中的explain和hint提的使用
查看>>
redis集群部署及踩过的坑
查看>>
为什么许多人宁愿死,也不愿思考
查看>>
从内核源代码配置文件预測泛泰新品(A920 ?)
查看>>
Disconf 学习系列之Disconf是什么?
查看>>