Pagini recente » Cod sursa (job #897368) | Cod sursa (job #2185935) | Autentificare | Atasamentele paginii Clasament xxx | Cod sursa (job #2509397)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n, m, grad[100010];
struct muchie{
int x, y;
int viz;
}muchii[500010];
int viz[100010];
vector<int>graf[100010];
stack<int>a;
void citire()
{
f>>n>>m;
for(int i=1; i<=m; i++)
{
int a, b;
f>>a>>b;
graf[a].push_back(i);
graf[b].push_back(i);
grad[a]++;
grad[b]++;
muchii[i].x=a;
muchii[i].y=b;
muchii[i].viz=0;
}
}
void dfs(int x)
{
viz[x]=1;
for(auto &v:graf[x])
if(viz[v]==0)
dfs(v);
}
int verificare()
{
for(int i=1; i<=n; i++)
{
if(grad[i]==0)
viz[i]=1;
if(grad[i]%2!=0)
return 0;
}/**
int nr=0;
for(int i=1; i<=n; i++)
if(viz[i]==0)
{
nr++;
dfs(i);
}
if(nr!=1)
return 0;*/
return 1;
}
void ciclu()
{
a.push(1);
while(!a.empty())
{
int x=a.top();
if(graf[x].empty())
{
a.pop();
if(!a.empty())
g<<x<<' ';
continue;
}
int y=graf[x].back();
graf[x].pop_back();
if(muchii[y].viz)
continue;
muchii[y].viz=1;
if(x==muchii[y].x)
a.push(muchii[y].y);
else
a.push(muchii[y].x);
}
}
int main()
{
citire();
if(verificare()==0)
g<<-1;
else
ciclu();
return 0;
}