Pagini recente » Cod sursa (job #836290) | Cod sursa (job #2504535) | Cod sursa (job #2233402) | Borderou de evaluare (job #1541036) | Cod sursa (job #2252858)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#define N 100010
#define M 500010
using namespace std;
vector<int> edges[N];
vector<int> answer;
stack<int> st;
int e1[M], e2[M];
bool usedEdge[M];
int main()
{
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n, m, x, y, node, edge, to;
fin >> n >> m;
for (int i=0; i<m; i++)
{
fin >> x >> y;
edges[x].push_back(i);
edges[y].push_back(i);
e1[i]=x;
e2[i]=y;
}
for (int i=1; i<=n; i++)
{
int currentSize=edges[i].size();
if (currentSize%2==1)
{
fout << -1;
return 0;
}
}
st.push(1);
while(!st.empty())
{
node=st.top();
if (edges[node].size())
{
edge=edges[node].back();
edges[node].pop_back();
if (!usedEdge[edge])
{
if (e1[edge]==node)
to=e2[edge];
else
to=e1[edge];
st.push(to);
usedEdge[edge]=1;
}
}
else
{
st.pop();
answer.push_back(node);
}
}
for (int i=0; i<answer.size(); i++)
fout << answer[i] << " ";
return 0;
}