欧拉路·一

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

小Hi和小Ho最近在玩一个解密类的游戏,他们需要控制角色在一片原始丛林里面探险,收集道具,并找到最后的宝藏。现在他们控制的角色来到了一个很大的湖边。湖上有N个小岛(编号1..N),以及连接小岛的M座木桥。每座木桥上各有一个宝箱,里面似乎装着什么道具。

湖边还有一个船夫,船夫告诉主角。他可以载着主角到任意一个岛上,并且可以从任意一个岛上再载着主角回到湖边,但是主角只有一次来回的机会。同时船夫告诉主角,连接岛屿之间的木桥很脆弱,走过一次之后就会断掉。

因为不知道宝箱内有什么道具,小Hi和小Ho觉得如果能把所有的道具收集齐肯定是最好的,那么对于当前岛屿和木桥的情况,能否将所有道具收集齐呢?

举个例子,比如一个由6个小岛和8座桥组成的地图:

主角可以先到达4号小岛,然后按照4->1->2->4->5->6->3->2->5的顺序到达5号小岛,然后船夫到5号小岛将主角接回湖边。这样主角就将所有桥上的道具都收集齐了。

提示:欧拉路的判定

输入

第1行:2个正整数,N,M。分别表示岛屿数量和木桥数量。1≤N≤10,000,1≤M≤50,000

第2..M+1行:每行2个整数,u,v。表示有一座木桥连接着编号为u和编号为v的岛屿,两个岛之间可能有多座桥。1≤u,v≤N

输出

第1行:1个字符串,如果能收集齐所有的道具输出“Full”,否则输出”Part”。

样例输入
6 8
1 2
1 4
2 4
2 5
2 3
3 6
4 5
5 6
样例输出
Full

代码: 经过Hiho验证,符合题目要求。
 import java.util.ArrayList;
import java.util.Scanner; public class Main { 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{
//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;
}
}

最新文章

  1. MCU的四个功能
  2. M1/M2个人总结
  3. android ListView点击item返回后listview滚动位置
  4. openssh/ntp/ftp漏洞
  5. Python无类再理解--metaclass,type
  6. HDU 5360 (贪心)
  7. Maven实战(六)依赖
  8. linq之join子句
  9. Windows Azure 实操 —— 迁移本地SharePoint服务器到Azure
  10. [转载] ubuntu开机直接进入命令行模式
  11. 深入javascript——构造函数和原型对象
  12. 实例解析shell子进程(subshell )
  13. 笔试题&amp;amp;面试题:CW输出矩阵
  14. 深入分析Java的String类的方法与特点
  15. 【LDA】修正 GibbsLDA++-0.2 中的两个内存问题
  16. MySQL基于binlog主从复制
  17. postgreSQL可视化工具pgAdmin3 导入表结构和数据
  18. Jenkins官方社区携手灵雀云成功举办Jenkins Meetup
  19. flask debug 模式开启
  20. WD Elements 与 time machine

热门文章

  1. Java基础 变量和数据类型及相关操作
  2. C函数前向声明省略参数
  3. imx6设备树pinctrl解析【转】
  4. java的应用项目
  5. Aspxgridview 根据条件来自定义计算Totalsummery
  6. python基础(1)---python简介
  7. Django内置信号
  8. hdu 1506(好题+DP或者RMQ)
  9. SnagIt截图后无法在编辑器打开,不显示截图内容的解决办法(转)
  10. [水煮 ASP.NET Web API2 方法论](1-1)在MVC 应用程序中添加 ASP.NET Web API