Pagini recente » Cod sursa (job #2077365) | Cod sursa (job #1549249) | Cod sursa (job #2175469) | Cod sursa (job #2051575) | Cod sursa (job #1331769)
#include<fstream>
#include<vector>
#define pb push_back
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int N,M,s[500005],u,vv[100005],a;
vector<int> v[100005];
//void euler(int i);
void eulers(int i);
int main()
{
in>>N>>M;
int i,a,b;
for(i=1;i<=N;++i) v[i].pb(0);
for(i=1;i<=M;++i)
{
in>>a>>b;
v[a].pb(b);
v[b].pb(a);
v[a][0]++;
v[b][0]++;
vv[a]++;
vv[b]++;
}
for(i=1;i<=N;++i) if(vv[i]%2) {out<<"-1\n"; return 0;}
eulers(1);
}
void euler(int i)
{
int k,j,c;
if(vv[i])
{
for(k=1;k<=v[i][0];++k)
{
if(v[i][k])
{
c=v[i][k];
v[i][k]=0;
--vv[i];
for(j=1;j<=v[c][0];++j)
{
if(v[c][j]==i) {v[c][j]=0, vv[c]--; break;}
}
euler(c);
}
}
}
if(!vv[i] && a<M) out<<i<<' ',++a;
}
void eulers(int i)
{
int k,j,c,nc;
s[++u]=i;
while(u)
{
nc=s[u];
if(vv[nc])
{
for(k=1;k<=v[nc][0];++k)
{
if(v[nc][k])
{
c=v[nc][k];
v[nc][k]=0;
--vv[nc];
for(j=1;j<=v[c][0];++j)
{
if(v[c][j]==nc) {v[c][j]=0, vv[c]--; break;}
}
s[++u]=c; break;
}
}
}
if(!vv[s[u]])
{
if(a<M) out<<s[u]<<' ';
++a;
--u;
}
}
}