Pagini recente » Cod sursa (job #2452537) | Cod sursa (job #1234938) | Cod sursa (job #2123608) | Cod sursa (job #1719804) | Cod sursa (job #1348435)
#include <fstream>
using namespace std;
int v[100001],n;
bool a[10000][10000];
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
bool viz[100001];
int grad[100001];
void citire()
{
int m;
f>>n>>m;
int x,y;
while(f>>x>>y)
{
if(x!=y)
{
a[x][y]=a[y][x]=1;
viz[x]=viz[y]=1;
}
}
}
bool viz1[100];
void DF(int k)
{
viz1[k]=1;
for(int i=1; i<=n; i++)
if(a[k][i]==true && viz1[i]==0)
DF(i);
}
bool grade()
{
for(int i=1; i<=n; i++)
{
int s=0;
for(int j=1; j<=n; j++)
s+=a[i][j];
if(s%2==1)
return 0;
}
return 1;
}
int vec(int nod)
{
for(int i=1; i<=n; i++)
if(a[i][nod]==1)
return i;
return -1;
}
void euler(int nod)
{
g<<nod<<" ";
while(vec(nod)!=-1)
{
int w=vec(nod);
a[w][nod]=a[nod][w]=0;
euler(w);
}
}
int main()
{
citire();
int p=1;
for(int i=1; i<=n; i++)
if(viz[i]==0)
{
p=0;
g<<"-1";
}
if(p==1)
{
int q=1;
if(grade()==0)
{
q=0;
g<<"-1";
}
if(q==1)
{
DF(1);
for(int i=1; i<=n; i++)
if(viz1[i]==0)
{
q=0;
g<<"-1";
break;
}
if(q==1)
euler(1);
}
}
g.close();
}