Pagini recente » Cod sursa (job #626745) | Cod sursa (job #1625770) | Cod sursa (job #1554082) | Cod sursa (job #1338769) | Cod sursa (job #1735238)
#include <vector>
#include <deque>
#include <fstream>
using namespace std;
vector <int> G[100005], H[100005];
deque <int> Q;
int x, y;
int i;
int N, M;
int degree[100005];
bool seen[500005];
int u, v;
int node;
int main ()
{
ifstream fin ("ciclueuler.in");
fin >> N >> M;
for (i=1; i<=M; i++)
{
fin >> u >> v;
G[u].push_back(v);
G[v].push_back(u);
H[u].push_back(i);
H[v].push_back(i);
degree[u]++;
degree[v]++;
}
fin.close();
ofstream fout ("ciclueuler.out");
for (i=1; i<=N; i++)
if ((degree[i]&1) == 1)
{
fout << -1;
return 0;
}
Q.push_back(1);
while (!Q.empty())
{
node = Q.back();
if (degree[node] == 0)
{
fout << node << ' ';
Q.pop_back();
}
else
{
x = G[node].back();
y = H[node].back();
G[node].pop_back();
H[node].pop_back();
if (seen[y] == 0)
{
seen[y] = 1;
Q.push_back(x);
degree[x]--;
degree[node]--;
}
}
}
fout.close();
return 0;
}