Pagini recente » Cod sursa (job #1455963) | Cod sursa (job #1765597) | Cod sursa (job #113590) | Cod sursa (job #1328618) | Cod sursa (job #1059280)
//nu ii frumos sa te uiti pe sursele altora:))...hotule....nu o sti face singur?:))
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
#define MAX 100020
vector <int> G[MAX];
stack <int> stiva;
int viz[MAX], arc[MAX], i, n;
void df(int nod)
{
viz[nod]=1;
for(i=0;i<G[nod].size();i++)
{
if(!viz[G[nod][i]])
df(G[nod][i]);
}
}
bool eulerian()
{
//df(1);
for(i=1;i<=n;i++)
{
if(arc[i]%2==1 || viz[i]==1)
return 0;
}
return 1;
}
void sterge(int v, int w)
{
arc[v]--;
arc[w]--;
G[v].erase(G[v].begin());
for(vector <int> ::iterator it=G[w].begin();it!=G[w].end();it++)
{
if(*it==v)
{
G[w].erase(it);
break;
}
}
}
int main()
{
int m, a, b, v, w;
fin>>n>>m;
while(m--)
{
fin>>a>>b;
G[a].push_back(b);
G[b].push_back(a);
arc[a]++;
arc[b]++;
}
if(!eulerian())
{
fout<<"-1\n";
return 0;
}
stiva.push(1);
while(!stiva.empty())
{
v=stiva.top();
fout<<v<<" ";
stiva.pop();
while(arc[v])
{
w=G[v][0];
stiva.push(v);
sterge(v, w);
v=w;
}
}
}