Pagini recente » Cod sursa (job #1265953) | Cod sursa (job #942860) | Cod sursa (job #469717) | Cod sursa (job #1160565) | Cod sursa (job #2509392)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector<int>graf[100010];
stack<int>stiva;
struct muc{
int viz,x,y;
}muchie[500010];
int n,m,x1,y1,grad[100010],nr;
int gradul()
{
for(int i=1;i<=n;i++)
{
if(grad[i]%2!=0)
return 0;
}
return 1;
}
void eulerian(int x)
{
stiva.push(1);
while(!stiva.empty())
{
int nod=stiva.top();
if(graf[nod].size()==0)
{
stiva.pop();
if(!stiva.empty())
fout<<nod<<" ";
continue;
}
int ultim=graf[nod].back();
int from=muchie[ultim].x;
int to=muchie[ultim].y;
graf[nod].pop_back();
if(muchie[ultim].viz==1)
continue;
if(nod!=from)
swap(from,to);
stiva.push(to);
muchie[ultim].viz=1;
}
}
int main()
{
fin>>n>>m;
for(int c=1;c<=m;c++)
{
fin>>x1>>y1;
graf[x1].push_back(c);
graf[y1].push_back(c);
grad[x1]++;
grad[y1]++;
muchie[c].x=x1;
muchie[c].y=y1;
muchie[c].viz=0;
}
if(gradul()==1)
{
eulerian(1);
}
else
fout<<-1;
return 0;
}