Pagini recente » Cod sursa (job #3204884) | Cod sursa (job #1381847) | Cod sursa (job #637575) | Cod sursa (job #1274101) | Cod sursa (job #649745)
Cod sursa(job #649745)
#include<cstdio>
#include<vector>
#include<algorithm>
#include<stack>
using namespace std;
vector <vector <int> > edges;
vector <int> degree;
stack <int> st;
int V, E;
int main(){
freopen("ciclueuler.in", "r", stdin), freopen("ciclueuler.out", "w", stdout);
int x, y, i;
scanf("%d %d", &V, &E);
vector <int> nullVector;
edges.assign(V + 1, nullVector);
degree.assign(V + 1, 0);
for (i = 0; i < E; i++){
scanf("%d %d", &x, &y);
edges[x].push_back(y), edges[y].push_back(x);
degree[x]++, degree[y]++;
}
//verifica daca este eulerian
for (i = 1; i <= V; i++)
if (degree[i] % 2 == 1) {printf ("-1\n"); return 0;}
printf("1\n"); return 0;
//construieste ciclul
for (i = 1; i <= V && degree[i] == 0; i++);
st.push(i);
E = E * 2;
while (E){
x = st.top();
if (degree[x] == 0) st.pop();
if (edges[x].size()){
int y = edges[x][0];
st.push(y);
edges[x].erase(edges[x].begin());
edges[y].erase(find(edges[y].begin(), edges[y].end(), x));
degree[x]--, degree[y]--;
E-=2;
}
}
for (; !st.empty(); st.pop())
printf("%d ", st.top());
return 0;
}