Pagini recente » Cod sursa (job #3249415) | Cod sursa (job #2427797) | Cod sursa (job #3032715) | Cod sursa (job #888004) | Cod sursa (job #2520723)
#include <bits/stdc++.h>
#define Dim 100001
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int N,M,x,y,d[Dim],Ans[5*Dim],cnt;
bool viz[Dim],used[5*Dim];
vector < pair<int,int> > V[Dim];
void BFS()
{
queue < int > qu;
qu.push(1);
viz[1]=1;
while(!qu.empty())
{
int nod=qu.front();
qu.pop();
for(unsigned int i=0;i<V[nod].size();i++)
{
int vecin=V[nod][i].first;
if( viz[vecin] == 0 )
{
viz[ vecin ] = 1;
qu.push(vecin);
}
}
}
}
bool Eulerian(int nod)
{
while(!V[nod].empty())
{
int vecin=V[nod].back().first;
int poz=V[nod].back().second;
V[nod].pop_back();
if( !used[poz] )
{
used[poz]=1;
Eulerian(vecin);
}
}
Ans[++cnt]=nod;
}
int main()
{
f>>N>>M;
for(int i=1;i<=M;i++)
{
f>>x>>y;
V[x].push_back({y,i});
V[y].push_back({x,i});
d[x]++;
d[y]++;
}
bool is_E=1;
BFS();
for(int i=1;i<=N&&is_E==1;i++)
if( viz[i]==1 && d[i]%2==0) continue;
else is_E=0;
Eulerian(1);
if(!is_E) g<<-1;
else
for(int i=cnt;i>=1;i--) g<<Ans[i]<<" ";
return 0;
}