Pagini recente » Cod sursa (job #2332643) | Cod sursa (job #1287948) | Cod sursa (job #291372) | Cod sursa (job #1119635) | Cod sursa (job #1702212)
#include <cstdio>
#include <list>
#include <queue>
#define MAXN 100010
#define MAXM 500010
using namespace std;
int sol[MAXM+1], s;
list <int> lst[MAXN+1];
int viz[MAXN+1], grad[MAXN+1], stiv[MAXM+1];
void bfs(int nod){
viz[nod]=1;
queue <int> q;
q.push(nod);
while(q.empty()==0){
nod=q.front();
viz[nod]=1;
q.pop();
for(list <int>::iterator it=lst[nod].begin(); it!=lst[nod].end(); it++)
if(viz[*it]==0)
q.push(*it);
}
}
void euler(int nod){
int st=0;
list <int>::iterator it;
stiv[st]=nod;
while(st>=0)
if(lst[stiv[st]].empty())
sol[s++]=stiv[st--];
else{
nod=lst[stiv[st]].front();
lst[stiv[st]].pop_front();
for(it=lst[nod].begin(); *it!=stiv[st]; it++);
lst[nod].erase(it);
stiv[++st]=nod;
}
}
int main()
{
FILE *fin, *fout;
int n, m, i, x, y;
fin=fopen("ciclueuler.in", "r");
fscanf(fin, "%d%d", &n, &m);
for(i=0; i<m; i++){
fscanf(fin, "%d%d", &x, &y);
grad[x]++; grad[y]++;
lst[x].push_back(y);
lst[y].push_back(x);
}
fclose(fin);
bfs(1);
for(i=1, x=0; i<=n && x==0; i++)
if((grad[i]&1) || viz[i]==0)
x=1;
fout=fopen("ciclueuler.out", "w");
if(x)
fprintf(fout, "-1\n");
else{
euler(1);
for(i=0; i<s-1; i++)
fprintf(fout, "%d ", sol[i]);
fprintf(fout, "\n");
}
return 0;
}