解题代码(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分
新闻热点
疑难解答