Pagini recente » Cod sursa (job #2414618) | Cod sursa (job #42620) | Cod sursa (job #2013810) | Cod sursa (job #2237869) | Cod sursa (job #1338044)
#include <cstdio>
#include <list>
#define NMAX 100001
using namespace std;
FILE* fin=fopen("ciclueuler.in","r");
FILE* fout=fopen("ciclueuler.out","w");
list <int> G[NMAX];
list <int> C1,C2;
int n,m,d[NMAX],total;
void citire();
int ciclu(int x,list <int> &C);
int main()
{
list<int>::iterator it;
citire();
total=ciclu(1,C1);
while (total<m)
{
for(it=C1.begin(); !d[*it]; it++);
total+=ciclu(*it,C2);
C1.insert(it,C2.begin(),C2.end());
}
for (it=C1.begin(); it!=C1.end(); it++)
{
fprintf(fout,"%d ",*it);
}
fprintf (fout,"\n");
return 0;
}
void citire()
{
int i,x,y;
fscanf(fin,"%d %d",&n,&m);
for (i=1; i<=m; i++)
{
fscanf(fin,"%d %d",&x,&y);
G[x].push_back(y);
G[y].push_back(x);
d[x]++; d[y]++;
}
}
int ciclu(int x,list <int> &C)
{
int nr=0,y;
list<int>::iterator it;
C.push_back(x);
do
{
y=G[x].front();
C.push_back(y);
d[x]--; d[y]--;
G[x].pop_front();
for (it=G[y].begin(); ; it++)
if (*it==x) {G[y].erase(it); break;}
x=y;
nr++;
}
while (y!=C.front());
C.pop_back();
return nr;
}