Pagini recente » Cod sursa (job #1199063) | Cod sursa (job #2299728) | Cod sursa (job #1247731) | Cod sursa (job #490051) | Cod sursa (job #1023729)
#include <stdio.h>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
#define NMAX 100005
#define MMAX 500005
#define IN "ciclueuler.in"
#define OUT "ciclueuler.out"
int n,m; bool ok=true;
vector<int> graf[NMAX],ciclu;
stack<int> stiva;
void citire();
void verificare();
void rezolvare();
void afisare();
int main()
{
citire();
verificare();
rezolvare();
afisare();
return 0;
}
void citire()
{
FILE * fin=fopen(IN,"r");
int i,x,y;
fscanf(fin,"%d%d",&n,&m);
for(i=1;i<=m;i++)
{
fscanf(fin,"%d%d",&x,&y);
graf[x].push_back(y);
graf[y].push_back(x);
}
fclose(fin);
}
void verificare()
{
int i;
for(i=1;i<=n;i++)
if(graf[i].size()%2==1)
afisare();
}
void rezolvare()
{
int a,b;
stiva.push(1);
while(!stiva.empty())
{
a=stiva.top();
if(!graf[a].empty())
{
b=graf[a].back();
graf[a].pop_back();
stiva.push(b);
graf[b].erase(find(graf[b].begin(),graf[b].end(),a));
}
else
{
ciclu.push_back(a);
stiva.pop();
}
}
}
void afisare()
{
FILE * fout=fopen(OUT,"w");
int i;
if(ciclu.size()==0)
{
fprintf(fout,"-1\n");
return;
}
fprintf(fout,"%d",ciclu[0]);
for(i=1;i<ciclu.size();i++)
fprintf(fout," %d",ciclu[i]);
fprintf(fout,"\n");
fclose(fout);
}