Pagini recente » Cod sursa (job #1853972) | Cod sursa (job #650215) | Istoria paginii runda/huismacui/clasament | Cod sursa (job #1404278) | Cod sursa (job #2812777)
import java.io.*;
import java.lang.*;
import java.util.*;
class Edge {
int u, v;
public Edge(int _u, int _v) { u = _u; v = _v; }
public int getU() {return u; }
public int getV() {return v; }
}
class Graph {
int n, m;
Edge ve[];
int d[]; // degree
boolean visited[];
//boolean te[]; // tree edge
//int nrvis;
boolean ok;
ArrayList<Integer> al[];
public Graph(int _n, int _m) {
n = _n; m = _m;
ve = new Edge[m];
}
void Dfs(int x) {
//++nrvis;
//visited[x] = true;
for(int i = 0; i < al[x].size(); ++i) {
int p = al[x].get(i);
if(!visited[p]) {
visited[p] = true;
// te[p] = true;
// int y =
}
}
}
void Euler(int u) {
}
ArrayList<Integer> solve() {
// degree and adiacency lists
d = new int[n + 1];
al = new ArrayList[n + 1];
for(int i = 1; i <= n; ++i)
al[i] = new ArrayList<Integer>();
for(int i = 0; i < m; ++i) {
int u = ve[i].getU();
int v = ve[i].getV();
++d[u];
++d[v];
al[u].add(i);
al[v].add(i);
}
ArrayList<Integer> res = new ArrayList<Integer>();
ok = true;
for(int i = 1; i <= n; ++i)
if(d[i] == 0 || (d[i] % 2 != 0)) {
ok = false;
res.add(-1);
return res;
}
//te = new boolean[m];
//nrvis = 0;
visited = new boolean[m];
ArrayList<Integer> q = new ArrayList<Integer> ();
q.add(1);
while(q.size() > 0) {
int node = q.get(q.size() - 1);
if(al[node].size() > 0) {
int e = al[node].get(al[node].size() - 1);
al[node].remove(al[node].size() - 1);
if(!visited[e]) {
visited[e] = true;
int y = ve[e].getU() ^ ve[e].getV() ^ node;
q.add(y);
}
} else {
q.remove(q.size() - 1);
res.add(node);
}
}
return res;
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new FileReader("ciclueuler.in"));
String[] vs = br.readLine().split(" ");
int n = Integer.parseInt(vs[0]);
int m = Integer.parseInt(vs[1]);
Graph g = new Graph(n, m);
for(int i = 0; i < m; ++i) {
vs = br.readLine().split(" ");
g.ve[i] = new Edge(Integer.parseInt(vs[0]), Integer.parseInt(vs[1]));
}
ArrayList<Integer> r = g.solve();
BufferedWriter out = new BufferedWriter(new FileWriter("ciclueuler.out"));
StringBuilder sb = new StringBuilder();
for(int i = 0; i < r.size() - 1; ++i)
sb.append(r.get(i)).append(" ");
out.write(sb.toString());
out.close();
}
}