Pagini recente » Cod sursa (job #797573) | Cod sursa (job #1286253) | Cod sursa (job #899265) | Cod sursa (job #2108550) | Cod sursa (job #431095)
Cod sursa(job #431095)
#include<fstream>
#include<vector>
#include<queue>
#define nmax 100100
using namespace std;
vector <pair <int,int> > v[nmax];
int u[5*nmax],st[5*nmax],w[5*nmax],sol[5*nmax];
int n;
int ok()
{
int nod;
queue <int> Q;
Q.push(1);
u[1]++;
while(!Q.empty())
{
nod=Q.front();
Q.pop();
vector<pair <int,int> >:: iterator fiu;
for(fiu=v[nod].begin();fiu!=v[nod].end();fiu++)
if(!u[(*fiu).first])
{
Q.push((*fiu).first);
u[(*fiu).first]++;
}
}
for(int i=1;i<=n;i++)
if(!u[i])
return 0;
int zero=0,i;
for(i=1;i<=n&&!zero;i++)
if(v[i].size()%2)
zero=1;
return 1^zero;
}
int main()
{
int m,i,x,y,k=0,done;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y;
v[x].push_back(make_pair(y,i));
v[y].push_back(make_pair(x,i));
}
if(!ok())
{
g<<"-1";
return 0;
}
st[++k]=1;
while(k)
{
done=0;
while(!v[st[k]].empty()&&!done)
{
if(!w[v[st[k]].back().second])
{
st[k+1]=v[st[k]].back().first;
w[v[st[k]].back().second]=1;
done=1;
}
else
v[st[k]].pop_back();
}
if(done)
k++;
else
sol[++sol[0]]=st[k--];
}
for(i=1;i<sol[0];i++)
g<<sol[i]<<' ';
return 0;
}