Hiho : 欧拉路径
欧拉路径
描述
在上一回中小Hi和小Ho控制着主角收集了分散在各个木桥上的道具,这些道具其实是一块一块骨牌。

主角继续往前走,面前出现了一座石桥,石桥的尽头有一道火焰墙,似乎无法通过。
小Hi注意到在桥头有一张小纸片,于是控制主角捡起了这张纸片,只见上面写着:
将M块骨牌首尾相连放置于石桥的凹糟中,即可关闭火焰墙。切记骨牌需要数字相同才能连接。
——By 无名的冒险者
小Hi和小Ho打开了主角的道具栏,发现主角恰好拥有M快骨牌。
小Ho:也就是说要把所有骨牌都放在凹槽中才能关闭火焰墙,数字相同是什么意思?
小Hi:你看,每一块骨牌两端各有一个数字,大概是只有当数字相同时才可以相连放置,比如:

小Ho:原来如此,那么我们先看看能不能把所有的骨牌连接起来吧。
输入
第1行:2个正整数,N,M。分别表示骨牌上出现的最大数字和骨牌数量。1≤N≤1,000,1≤M≤5,000
第2..M+1行:每行2个整数,u,v。第i+1行表示第i块骨牌两端的数字(u,v),1≤u,v≤N
输出
第1行:m+1个数字,表示骨牌首尾相连后的数字
比如骨牌连接的状态为(1,5)(5,3)(3,2)(2,4)(4,3),则输出"1 5 3 2 4 3"
你可以输出任意一组合法的解。
- 样例输入
-
5 5
3 5
3 2
4 2
3 4
5 1 - 样例输出
-
1 5 3 4 2 3
import java.util.ArrayList;
import java.util.Scanner; public class Main { ArrayList result = new ArrayList();
public static void main(String[] argv){ Scanner in = new Scanner(System.in);
int m = in.nextInt();
int n = in.nextInt();
/*
* 用可变长数组来代替链表 描述无向图
*/
ArrayList<Integer>[] s = new ArrayList[m];
for(int i=0; i<m; i++){
s[i] = new ArrayList<Integer>();
}
for(int j=0; j<n; j++){
int a = in.nextInt();
int b = in.nextInt();
s[a-1].add(b-1);
s[b-1].add(a-1);
}
in.close();
//System.out.println("Begin check");
Main Test = new Main(); /*
* 查看是否符合 度数为奇数的点有2个或0个
*/
int begin_State = Test.firstSuccess(s);
if(begin_State==s.length){
System.out.println("Part");
return;
}
else{ Test.DNF(s, begin_State);
for(int i=0;i<Test.result.size(); i++){
if(i>0)
System.out.print(" ");
System.out.print(Test.result.get(i));
}
//System.out.println(begin_State);
/*
* 查看是否为连通图
*/
/*
boolean second = Test.secondSuccess(s, begin_State);
if(second)
System.out.println("Full");
else
System.out.println("Part");
*/
} } public int firstSuccess(ArrayList[] s){
int success = 0;
int leng =s.length;
int Max_simple=0;
for(int i=0; i<leng; i++){
//System.out.println(s[i].toString());
int temp = s[i].size();
//System.out.print(temp);
if(temp%2==1){
success++;
Max_simple=i;
//System.out.println(i);
}
if(success>2)
break;
}
//System.out.println(success);
if(success==2||success==0)
return Max_simple;
else
return leng;
} public boolean secondSuccess(ArrayList[] s, int begin){
int length = s.length;
int [] Add = new int[length];
int [] Checked = new int[length];
Add[begin]=1;
int Number=0;
while(true){
int temp=0; int not_End=0;
for(int i=0; i<length; i++){
if(Add[i]==1&&Checked[i]==0){
temp=i;
not_End++;
break;
}
}
if(not_End==0)
break;
//System.out.println(temp);
for(int k=0; k<s[temp].size();k++){
Add[(int) s[temp].get(k)]=1;
}
Checked[temp]=1; Number++;
}
//System.out.println(Number);
if(Number==length)
return true;
else
return false;
} public void DNF(ArrayList[] s, int start){ while(true){ if(s[start].size()>0){
int temp = (Integer)s[start].get(0);
s[start].remove(0);
s[temp].remove((Integer)start);
DNF(s, temp);
}
else
break;
}
result.add(start+1);
//System.out.print(start); }
}
Hiho : 欧拉路径的更多相关文章
- hiho欧拉路·二 --------- Fleury算法求欧拉路径
hiho欧拉路·二 分析: 小Ho:这种简单的谜题就交给我吧! 小Hi:真的没问题么? <10分钟过去> 小Ho:啊啊啊啊啊!搞不定啊!!!骨牌数量一多就乱了. 小Hi:哎,我就知道你会遇 ...
- hiho一下 第五十周 (求欧拉路径)
http://hihocoder.com/contest/hiho50/problem/1 这题有重边,所以邻接矩阵用来统计节点u,v之间有多少条边相连,并且用另外一个数组统计每个节点的入度. 然后查 ...
- hiho一下 第五十一周(有向图欧拉路径)51
//////////////////////////////////////////////////////////////////////////////////////////////////// ...
- 【USACO 3.3】Riding The Fences(欧拉路径)
题意: 给你每个fence连接的两个点的编号,输出编号序列的字典序最小的路径,满足每个fence必须走且最多走一次. 题解: 本题就是输出欧拉路径. 题目保证给出的图是一定存在欧拉路径,因此找到最小的 ...
- 【DP】HIHO 1078
HIHO #1037 : 数字三角形 题意:中文题就不说了. 思路:提示也很清楚,就这里贴一下代码.注意边界情况. dp[i][j] = max(dp[i-1][j],dp[i-1][j-1])+ma ...
- hiho一下21周 线段树的区间修改 离散化
离散化 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho ...
- hdu 3472 HS BDC(混合路的欧拉路径)
这题是混合路的欧拉路径问题. 1.判断图的连通性,若不连通,无解. 2.给无向边任意定向,计算每个结点入度和出度之差deg[i].deg[i]为奇数的结点个数只能是0个或2个,否则肯定无解. 3.(若 ...
- poj 2337 有向图输出欧拉路径
Catenyms Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10186 Accepted: 2650 Descrip ...
- nyoj 42 一笔画问题 欧拉路径
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=42 欧拉回路,欧拉路径水题~ 代码: #include "stdio.h&quo ...
随机推荐
- Python爬虫—破解JS加密的Cookie
前言 在GitHub上维护了一个代理池的项目,代理来源是抓取一些免费的代理发布网站.上午有个小哥告诉我说有个代理抓取接口不能用了,返回状态521.抱着帮人解决问题的心态去跑了一遍代码.发现果真是这样. ...
- Vue组件-动态组件
动态组件 通过使用保留的 <component> 元素,动态地绑定到它的 is 特性,可以让多个组件使用同一个挂载点,并动态切换: <div id="app6"& ...
- centos_7.1.1503_src_1
http://vault.centos.org/7.1.1503/os/Source/SPackages/ 389-ds-base-1.3.3.1-13.el7.src.rpm 31-Mar-2015 ...
- Shell脚本中引用、调用另一个脚本文件的2种方法
Shell脚本中引用.调用另一个脚本文件的2种方法 http://www.jb51.net/article/67903.htm
- Mysql 数据库学习笔记01查询
1.数据查询基本操作 * 正则表达式查询: 字段名 regexp '匹配方式', select * from user where username regexp '^名' -- 查询 姓名 名 ...
- HIbernate学习笔记5 之 查询
一.HQL查询 * 按条件查询,条件中写的是属性名,之后在query对象为添加赋值,如: String hql = " from User where uid=?"; Sessio ...
- linux下文件查询命令(cat,more,less,head,tail)
众所周知Linux中命令cat.more.less均可用来查看文件内容,主要区别有:cat是一次性显示整个文件的内容,还可以将多个文件连接起来显示,它常与重定向符号配合使用,适用于文件内容少的情况:m ...
- Windows服务器学习篇:服务器连接与退出
此文是我早期在公司内部发布的一篇给予新入职程序员基础技术培训的文章,非常基础简单,现拿出来给大家分享.当然,已工作人士可直接忽略... 一.Windows服务器连接 1. 在桌面菜单中的“运行”里,输 ...
- vue-vuex安装
npm install vuex --save 然后在package.json文件的 dependencies中就看到有了一个vuex的文件 解释一下 dependencies生产环境它的意思就是上线 ...
- 连接LilyPad之Windows平台的驱动
连接LilyPad之Windows平台的驱动 LilyPad和其他的Arduino控制板的不同之处是它是为电子织物和可穿戴设计的.那么,它的大小就必须要紧凑.所以,它并没有板载其他大多数板子都具有的U ...