zoukankan      html  css  js  c++  java
  • Hiho : 欧拉路径

    欧拉路径

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

    描述

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

    主角继续往前走,面前出现了一座石桥,石桥的尽头有一道火焰墙,似乎无法通过。

    小Hi注意到在桥头有一张小纸片,于是控制主角捡起了这张纸片,只见上面写着:

    将M块骨牌首尾相连放置于石桥的凹糟中,即可关闭火焰墙。切记骨牌需要数字相同才能连接。
    ——By 无名的冒险者
    

    小Hi和小Ho打开了主角的道具栏,发现主角恰好拥有M快骨牌。

    小Ho:也就是说要把所有骨牌都放在凹槽中才能关闭火焰墙,数字相同是什么意思?

    小Hi:你看,每一块骨牌两端各有一个数字,大概是只有当数字相同时才可以相连放置,比如:

    小Ho:原来如此,那么我们先看看能不能把所有的骨牌连接起来吧。

     

    提示:Fleury算法求欧拉路径

     

    输入

    第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

      1 import java.util.ArrayList;
      2 import java.util.Scanner;
      3 
      4 
      5 public class Main {
      6 
      7        ArrayList result = new ArrayList();
      8         public static void main(String[] argv){
      9             
     10             Scanner in = new Scanner(System.in);
     11             int m = in.nextInt();
     12             int n = in.nextInt();
     13             /*
     14              * 用可变长数组来代替链表 描述无向图
     15              */
     16             ArrayList<Integer>[] s = new ArrayList[m];
     17             for(int i=0; i<m; i++){
     18                 s[i] = new ArrayList<Integer>();
     19             }
     20             for(int j=0; j<n; j++){
     21                 int a = in.nextInt();
     22                 int b = in.nextInt();
     23                 s[a-1].add(b-1);
     24                 s[b-1].add(a-1);
     25             }
     26             in.close();
     27             //System.out.println("Begin check");    
     28             Main Test = new Main();
     29             
     30             /*
     31              * 查看是否符合 度数为奇数的点有2个或0个
     32              */
     33             int begin_State = Test.firstSuccess(s);
     34             if(begin_State==s.length){                
     35                 System.out.println("Part");
     36                 return;
     37             }
     38             else{
     39                 
     40                 Test.DNF(s, begin_State);
     41                 for(int i=0;i<Test.result.size(); i++){
     42                     if(i>0)
     43                         System.out.print(" ");
     44                     System.out.print(Test.result.get(i));
     45                 }
     46                 //System.out.println(begin_State);
     47                 /*
     48                  * 查看是否为连通图
     49                  */
     50                 /*
     51                 boolean second =  Test.secondSuccess(s, begin_State);
     52                 if(second)
     53                     System.out.println("Full");
     54                 else
     55                     System.out.println("Part");
     56                 */
     57             }
     58             
     59             
     60             
     61         }
     62         
     63         public int firstSuccess(ArrayList[] s){
     64             int success = 0;
     65             int leng =s.length;
     66             int Max_simple=0;
     67             for(int i=0; i<leng; i++){
     68                 //System.out.println(s[i].toString());
     69                 int temp = s[i].size();
     70                 //System.out.print(temp);
     71                 if(temp%2==1){
     72                     success++;
     73                     Max_simple=i;
     74                     //System.out.println(i);
     75                 }                    
     76                 if(success>2)
     77                     break;
     78             }
     79             //System.out.println(success);
     80             if(success==2||success==0)
     81                 return Max_simple;
     82             else
     83                 return leng;
     84         }
     85         
     86         public boolean secondSuccess(ArrayList[] s, int begin){
     87             int length = s.length;
     88             int [] Add = new int[length];
     89             int [] Checked = new int[length];
     90             Add[begin]=1;
     91             int Number=0;
     92             while(true){
     93                 int temp=0; int not_End=0;
     94                 for(int i=0; i<length; i++){
     95                     if(Add[i]==1&&Checked[i]==0){
     96                         temp=i;
     97                         not_End++;
     98                         break;
     99                     }
    100                 }                
    101                 if(not_End==0)
    102                     break;
    103                 //System.out.println(temp);
    104                 for(int k=0; k<s[temp].size();k++){
    105                     Add[(int) s[temp].get(k)]=1;
    106                 }
    107                 Checked[temp]=1;    Number++;        
    108             }
    109             //System.out.println(Number);
    110             if(Number==length)
    111                 return true;
    112             else
    113                 return false;
    114         }
    115 
    116         
    117         public void DNF(ArrayList[] s, int start){
    118             
    119             while(true){
    120                 
    121                    if(s[start].size()>0){                       
    122                        int temp = (Integer)s[start].get(0);
    123                        s[start].remove(0);
    124                        s[temp].remove((Integer)start);
    125                        DNF(s, temp);                
    126                    }    
    127                    else 
    128                        break;
    129             }
    130             result.add(start+1);
    131             //System.out.print(start);
    132             
    133         }
    134 }
  • 相关阅读:
    不懂编程,不会数据架构,同事做的可视化报表是如何让我佩服的?
    catalina.sh设置JAVA_HOME后还无法解决更换JDK有关问题
    TOMCAT数据源连接配置
    L​i​n​u​x​下​配​置​T​o​m​c​a​t
    linux下JAVA开发的环境配置
    tomcat catalina.sh JAVA_OPTS参数说明与配置
    TOMCAT-报错The BASEDIR environment variable is not defined correctly
    EBS条形码打印
    PA模块报错-实际返回的行数超出请求的行数(分析标准FORM报错解决思路)
    WIP完工入库及完工退回的几个重要问题
  • 原文地址:https://www.cnblogs.com/udld/p/4574996.html
Copyright © 2011-2022 走看看