Pagini recente » Cod sursa (job #1946061) | Cod sursa (job #2895754) | Cod sursa (job #1965735) | Cod sursa (job #180264) | Cod sursa (job #950625)
Cod sursa(job #950625)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
#define Nmax 500005
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
struct pos{
int x;
vector<int>::iterator it;
};
typedef vector<int>::iterator iterator;
vector <int> v[100005];
int par[100005];
stack <pos> stk;
pos p;
vector<int>::iterator it;
int i, j, n, m, x, y, temp;
void citire()
{
f>>n>>m;
int a,b;
for (int i=1;i<=m;++i)
{
f>>a>>b;
v[a].push_back(b);
v[b].push_back(a);
par[a]++;
par[b]++;
}
}
int main()
{
citire();
bool flg=0;
for (i=1; i<=n; i++)
if (par[i]%2)
{
flg=1;
break;
}
if (flg)
g<<-1;
else
{
it = v[1].begin(); x=1;
while (it!=v[x].end()){
if ((*it)!=0)
{
p.x = x; p.it = it;
stk.push(p);
temp=*it;
*it=0;
for (vector<int>::iterator fit=v[temp].begin();fit!=v[temp].end();fit++)
if ((*fit)==x)
{
*fit=0;
break;
}
x=temp;
it=v[x].begin();
}
it++;
if (it==v[x].end() && !stk.empty())
{
g<<x<<" ";
x=stk.top().x;
it=stk.top().it;
stk.pop();
}
}
}
return 0;
}