Pagini recente » Cod sursa (job #2754984) | Cod sursa (job #276763) | Cod sursa (job #1880129) | Cod sursa (job #2856966) | Cod sursa (job #1338079)
#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()
{
int i;
list<int>::iterator it,it1;
citire();
// for (i=1; i<=n; i++)
// {
// for (it=G[i].begin(); it!=G[i].end(); it++)
// fprintf(fout,"%d %d\n",i,*it);
// //fprintf (fout,"\n");
// }
total=ciclu(1,C1);
// for (it=C1.begin(); it!=C1.end(); it++)
// fprintf(fout,"%d ",*it);
// fprintf (fout,"\n");
while (total<m)
{
for(it=C1.begin(); !d[*it]; it++);
total+=ciclu(*it,C2);
// for (it1=C2.begin(); it1!=C2.end(); it1++) fprintf(fout,"%d ",*it1);
// fprintf (fout,"\n");
C1.insert(it,C2.begin(),C2.end());
// for (it1=C1.begin(); it1!=C1.end(); it1++) fprintf(fout,"%d ",*it1);
// fprintf (fout,"\n");
C2.clear();
}
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;
}