Pagini recente » Cod sursa (job #2641972) | Cod sursa (job #34316) | Cod sursa (job #2552702) | Cod sursa (job #1588017) | Cod sursa (job #495100)
Cod sursa(job #495100)
#include <cstdio>
#include <list>
#include <stack>
#include <bitset>
#include <queue>
using namespace std;
int n,m,x,y,nod,i;
list<int> graf[100005];
list<int>::iterator u;
stack<int> s;
queue<int> q;
bitset<100005> viz;
bool k;
void ciclu(int nod)
{
int vecin;
while (graf[nod].size())
{
s.push(nod);
vecin=graf[nod].front();
graf[nod].pop_front();
for (u=graf[vecin].begin();u!=graf[vecin].end();++u)
if (*u==nod)
{
graf[vecin].erase(u);
break;
}
nod=vecin;
}
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d %d",&n,&m);
while (m--)
{
scanf("%d %d",&x,&y);
graf[x].push_back(y);
graf[y].push_back(x);
}
k=true;
for (i=1;i<=n;++i)
if (graf[i].size() & 1)
{
k=false;
break;
}
if (k)
{
q.push(x);
while (!q.empty())
{
for (u=graf[q.front()].begin();u!=graf[q.front()].end();++u)
if (!viz.test(*u))
{
viz.flip(*u);
q.push(*u);
}
q.pop();
}
for (i=1;i<=n;++i)
if (!graf[i].size() && !viz.test(i))
{
k=false;
break;
}
}
if (!k)
{
printf("-1");
return 0;
}
nod=1;
do
{
printf("%d ",nod);
ciclu(nod);
nod=s.top();
s.pop();
}
while (!s.empty());
return 0;
}