首页 > 编程 > Java > 正文

CCF之送货(java)

2019-11-08 19:59:13
字体:
来源:转载
供稿:网友

解题代码(java):

import java.util.Collections;  import java.util.Comparator;  import java.util.LinkedList;  import java.util.Queue;  import java.util.Scanner;  import java.util.Stack;  import java.util.Vector;  public class Main {        public static Vector<Integer> []G = new Vector[10010];      public static int []d = new int[10010];      public static boolean  [][]edge = new  boolean [10010][10010];      public static Stack<Integer> S = new Stack<Integer>();      public static Queue<Integer> q = new LinkedList<Integer>();            static int bfs(int s,int n){                                 boolean []vis = new boolean[10010];              q.add(s);              vis[s]=true;                while(!q.isEmpty()){                    int u=q.remove();                                       for(int i=0;i<G[u].size();++i){                        int v=G[u].get(i);                        if(!vis[v]){                            vis[v]=true;                            q.add(v);                            }                                                 }                    }                int x = 0;              for(int i = 1;i<n+1;i++)              {                  if(!vis[i])                  {                      x++;                  }                                }              return x;  }            PRivate static void DFS1(int u,int n) {            for(int i=0;i<G[u].size();++i){            int v=G[u].get(i);            if(!edge[u][v]){                edge[u][v]=edge[v][u] =true;                DFS1(v,n);              S.push(v);              }                  }  }    static class comp implements Comparator<Integer>  {        @Override      public int compare(Integer o1, Integer o2) {          // TODO Auto-generated method stub          return o1-o2;      }        }                  public static void main(String[] args) {                    Scanner in  = new Scanner(System.in);          int  n = in.nextInt();          int m = in.nextInt();                for(int i = 0;i<n+1;i++)      {          G[i] = new Vector<Integer>();                }                    for(int i = 1;i<m+1;i++)          {                            int x = in.nextInt();              int y = in.nextInt();              G[x].add(y);              G[y].add(x);              d[x]++;              d[y]++;                        }          in.close();                                                    int number = 0;            for (int i=1;i<n+1;i++)            {              if (d[i]%2!=0)                   number++;          }              if (bfs(1,n)==0 && (number==0 ||number==2))          {              for(int i = 1;i<n+1;i++)              {                  Collections.sort(G[i]);                            }                 DFS1(1,n);               System.out.print(1);               while(!S.empty())               {                   System.out.print(" "+S.pop());               }                 }          else               System.out.println(-1);                }                }  运行超时,算法没学好,希望大神帮忙,50分


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表