Pagini recente » Cod sursa (job #1797457) | Cod sursa (job #2504067) | Cod sursa (job #700187) | Cod sursa (job #1605522) | Cod sursa (job #3269713)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
const int NMAX = 100000;
int n, m;
struct muchie
{
int x, y;
};
vector<int> G[NMAX+1], l;
vector<muchie> M;
vector<bool> elim;
stack<int> s;
void citire()
{
int x, y;
fin>>n>>m;
while(m--)
{
fin>>x>>y;
M.push_back({x, y});
elim.push_back(0);
G[x].push_back(M.size()-1);
G[y].push_back(M.size()-1);
}
}
void euler()
{
s.push(1);
while(!s.empty())
{
int v=s.top();
if(G[v].size()>0)
{
int x=G[v].back();
G[v].pop_back();
if(!elim[x])
{
elim[x]=1;
int p=M[x].y;
if(p==v)
p=M[x].x;
s.push(p);
}
}
else
{
l.push_back(v);
s.pop();
}
}
}
bool verif()
{
for (int i=1; i<=n; i++)
if(G[i].size()%2!=0)
return 0;
return 1;
}
int main()
{
int x, y;
fin>>n>>m;
for (int i=1; i<=m; i++)
{
fin>>x>>y;
M.push_back({x,y});
elim.push_back(0);
G[x].push_back(M.size()-1);
G[y].push_back(M.size()-1);
}
if(!verif())
fout<<"-1";
else
{
euler();
for (unsigned i=0; i<l.size()-1; i++)
fout<<l[i]<<' ';
}
fin.close();
fout.close();
return 0;
}