Pagini recente » Cod sursa (job #1909238) | Cod sursa (job #1640771) | Cod sursa (job #1084906) | Cod sursa (job #2740571) | Cod sursa (job #495936)
Cod sursa(job #495936)
#include <algorithm>
#include <fstream>
#include <vector>
using namespace std;
int c[500003];
int ce[500005];
vector<int> a[100001];
int p = 1, u = 1, nr,k;
void ciclu(int x)
{ bool ok = true;
int nr=x;
do {for (int i = 0; (size_t) i < a[x].size() && ok; i++)
{ u++,c[u] = a[x][i];
int z = a[x][i];
vector<int>::iterator j = find(a[z].begin(), a[z].end(), x);
a[z].erase(j),a[x].erase(a[x].begin()),x = z;
break;
}
} while (x!=nr);
ce[++k]=x;
u--;
}
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int main()
{ int N, M;
in >> N >> M;
for (int i = 1; i <= M; i++)
{ int x, y;
in >> x >> y;
a[x].push_back(y),a[y].push_back(x);
}
for (int i = 1; i <= N; i++)
if (a[i].size() % 2 )
{ out << -1;return 0;}
u=0,c[u]=1,k=0;
do
if (a[c[u]].size() > 0) ciclu(c[u]);
else ce[++k]=c[u],u--;
while (u>0);
if(k!=M){out << -1; return 0;}
for (int i = 1; i <= k; i++)
out << ce[i] << ' ';
return 0;
}