Pagini recente » Cod sursa (job #3205448) | Cod sursa (job #175139) | Cod sursa (job #3004597) | Cod sursa (job #739336) | Cod sursa (job #1623039)
#include <iostream>
#include <fstream>
#include <stack>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
stack <int> S, rez;
vector <int> G[100005];
bool viz[100005];
int c[100005], n, m, nr, rang[100005];
void bfs()
{
int p, u;
p=1;
u=1;
viz[1]=1;
c[1]=1;
while(p<=u)
{
int node=c[p];
p++;
for(unsigned int i=0;i<G[node].size();i++)
{
if(!viz[G[node][i]])
{
u++;
c[u]=G[node][i];
viz[G[node][i]]=1;
}
}
}
}
bool verif()
{
bfs();
for(int i=1;i<=n;i++)
{
if(rang[i]%2!=0)
return 0;
if(!viz[i])
return 0;
}
return 1;
}
void sterge(int v1, int v2)
{
G[v1].erase(G[v1].begin());
for(unsigned int i=0;i<G[v2].size();i++)
{
if(G[v2][i]==v1)
{
G[v2].erase(G[v2].begin()+i);
return;
}
}
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
int u, v;
fin>>u>>v;
G[u].push_back(v);
rang[u]++;
G[v].push_back(u);
rang[v]++;
}
if(verif())
{
S.push(1);
while(!S.empty())
{
int v1=S.top();
if(G[v1].size())
{
int v2=G[v1][0];
sterge(v1,v2);
S.push(v2);
}
else
{
rez.push(v1);
S.pop();
}
}
rez.pop();
while(!rez.empty())
{
fout<<rez.top()<<" ";
rez.pop();
}
}
else
fout<<-1;
return 0;
}