Pagini recente » Cod sursa (job #410302) | Cod sursa (job #575741) | Cod sursa (job #1681910) | Cod sursa (job #1077293) | Cod sursa (job #2248700)
#include <bits/stdc++.h>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
const int dim=1e5+5;
int nodes,edges,degree[dim];
vector <list<int> > graph(dim);
stack <int> st;
void read()
{
f>>nodes>>edges;
for(int i=1;i<=edges;++i)
{
int x,y;
f>>x>>y;
graph[x].push_front(y);
graph[y].push_front(x);
degree[x]++;
degree[y]++;
}
f.close();
}
void RemoveEdge(int node1,int node2)
{
graph[node1].erase(find(graph[node1].begin(),graph[node1].end(),node2));
graph[node2].erase(find(graph[node2].begin(),graph[node2].end(),node1));
}
void task()
{
for(int i=1;i<=nodes;i++)
if(degree[i]%2==1)
{
g<<-1;
return;
}
st.push(1);
while(!st.empty())
{
int node=st.top();
if(!graph[node].empty())
{
int next=graph[node].front();
st.push(next);
RemoveEdge(node,next);
}
else
{
st.pop();
if(!st.empty())
g<<node<<" ";
}
}
}
int main()
{
read();
task();
return 0;
}