Pagini recente » Cod sursa (job #1555729) | Cod sursa (job #2537585) | Cod sursa (job #2486254) | Cod sursa (job #3259232) | Cod sursa (job #1343262)
#include <bits/stdc++.h>
#define DMAX 5005
using namespace std;
int a, b, n, m;
int use[DMAX];
vector <int> v[DMAX];
void DFS(int x)
{
for(int i=0;i<v[x].size();i++)
if(!use[v[x][i]])
{
use[v[x][i]]=1;
DFS(v[x][i]);
}
}
bool valid()
{
DFS(1);
for(int i=1;i<=n;i++)
if(use[i]==0 || v[i].size()%2==1)
return false;
return true;
}
void erase_edge(int a, int b)
{
v[a].erase(v[a].begin());
for(int i=0;i<v[b].size();i++)
if(v[b][i]==a) {
v[b].erase(v[b].begin()+i);
return;
}
}
void euler()
{
stack <int> s;
s.push(1);
while(!s.empty())
{
int x=s.top();
if(v[x].size())
{
s.push(v[x][0]);
erase_edge(x, v[x][0]);
}
else{
cout<<x<<" ";
s.pop();
}
}
cout<<'\n';
}
int main()
{
freopen("cilcueuler.in", "r", stdin);
freopen("cilcueuler.out", "w", stdout);
scanf("%i %i", &n, &m);
for(int i=1;i<=m;i++){
scanf("%i %i", &a, &b);
v[a].push_back(b);
v[b].push_back(a);
}
if(valid())
euler();
else cout<<"-1\n";
return 0;
}