Pagini recente » Cod sursa (job #1317153) | Cod sursa (job #2471553) | Cod sursa (job #2186507) | Cod sursa (job #1936445) | Cod sursa (job #1290571)
#include<cstdio>
#include<vector>
#define maxN 100001
using namespace std;
FILE *f=fopen("ciclueuler.in","r");
FILE *g=fopen("ciclueuler.out","w");
vector<int>L[maxN];
bool viz[maxN];
int t[maxN],d[maxN],n,m;
void citire()
{
int i,x,y;
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=m;i++)
{
fscanf(f,"%d%d",&x,&y);
L[x].push_back(y);
L[y].push_back(x);
d[x]++;
d[y]++;
}
}
bool verif()
{ int i;
for(i=1;i<=n;i++)
if(viz[i]==0)return false;
for(i=1;i<=n;i++)
if(d[i]%2==1)return false;
return true;
}
void df(int i)
{
int j;
viz[i]=true;
for(j=0;j<L[i].size();j++)
if(viz[L[i][j]]==false)
{
t[L[i][j]]=i;
df(L[i][j]);
}
}
void sterge(int x,int y)
{
int j;
for(j=0;j<L[x].size();j++)
if(L[x][j]==y){L[x].erase(L[x].begin()+j);return;}
}
void euler(int i)
{
int j,nodcur;
for(j=0;j<L[i].size();j++)
if(t[L[i][j]]!=i&&t[i]!=L[i][j])
{
nodcur=L[i][j];
fprintf(g,"%d ",nodcur);
L[i].erase(L[i].begin()+j);
sterge(nodcur,i);
euler(nodcur);
}
for(j=0;j<L[i].size();j++)
if(t[L[i][j]]==i||t[i]==L[i][j])
{
nodcur=L[i][j];
L[i].erase(L[i].begin()+j);
fprintf(g,"%d ",nodcur);
sterge(nodcur,i);
euler(nodcur);
}
}
int main()
{
citire();
df(1);
bool ok=verif();
if(ok==0)
fprintf(g,"-1\n");
else
{
fprintf(g,"1 ");
euler(1);
//afisare();
}
return 0;
}