Pagini recente » Cod sursa (job #1283641) | Cod sursa (job #1272191) | Cod sursa (job #120129) | Cod sursa (job #62841) | Cod sursa (job #1700909)
#include <cstdio>
#include <list>
#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];
void dfs(int nod){
viz[nod]=1;
for(list <int>::iterator it=lst[nod].begin(); it!=lst[nod].end(); it++)
if(viz[*it]==0)
dfs(*it);
}
void euler(int nod){
int node;
list <int>::iterator it;
while(lst[nod].empty()==0){
node=lst[nod].front();
lst[nod].pop_front();
for(it=lst[node].begin(); *it!=nod; it++);
lst[node].erase(it);
euler(node);
}
sol[s++]=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);
dfs(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;
}