Pagini recente » Cod sursa (job #1547582) | Cod sursa (job #1497180) | Cod sursa (job #2365891) | Cod sursa (job #383964) | Cod sursa (job #1134621)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
const int N=100001;
struct muchii {
int x,y;
} v[N*5];
int n,m;
vector <int> a[N];
bool folosit[5*N],viz[N];
void citire() {
f>>n>>m;
for(int i=1; i<=m; i++) {
f>>v[i].x>>v[i].y;
a[v[i].x].push_back(i);
a[v[i].y].push_back(i);
}
}
void euler(int x) {
int y,ind;
for(int i=0; i<a[x].size(); i++) {
ind=a[x][i];
if(folosit[ind]) continue;
y=v[ind].y;
if(y==x) y=v[ind].x;
folosit[ind] = true;
euler(y);
}
g<<x<<" ";
}
bool pare()
{
for(int i=1;i<=n;i++)
if(a[i].size()%2==1) return 0;
return 1;
}
void dfs(int x)
{
viz[x]=true;
for(int i=0;i<a[x].size();i++)
{
if(!viz[a[x][i]]) dfs(a[x][i]);
}
}
bool conex()
{
for(int i=1;i<=n;i++)
if(viz[i]==false) return 0;
return 1;
}
int main() {
int ok=1;
citire();
dfs(1);
if (conex() && pare())
ok = 1;
else
ok = 0;
if(ok==1) euler(1);
else g << "-1";
return 0;
}