Pagini recente » Cod sursa (job #1791751) | Cod sursa (job #2035156) | Cod sursa (job #1343900) | Cod sursa (job #3201720) | Cod sursa (job #2820550)
#include<bits/stdc++.h>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n,m;
const int nMax=100001;
vector<int> v[nMax];
int d[100001],vis[500001],to[500001],from[500001],viz[500001];
vector<int> euler_cycle(){
vector<int> ans;
stack<int> st;
int urmatorul_nod;
for(int i=1;i<=n;i++)
{
if(d[i]%2 == 1)
{
ans.push_back(-1);
return ans;
}
}
st.push(1);
while(!st.empty()){
int node=st.top();
if(!v[node].empty()){
int numar_muchie=v[node].back();
v[node].pop_back();
if(viz[numar_muchie]==0) {
viz[numar_muchie]=1;
if (to[numar_muchie] != node)
urmatorul_nod = to[numar_muchie];
else
urmatorul_nod = from[numar_muchie];
st.push(urmatorul_nod);
}
}
else{
ans.push_back(st.top());
st.pop();
}
}
return ans;
}
int main() {
int i,x,y;
f>>n>>m;
for(i=0;i<m;i++){
f>>x>>y;
d[x]++;
d[y]++;
v[x].push_back(i);
v[y].push_back(i);
from[i]=x;
to[i]=y;
}
vector<int> ans;
ans = euler_cycle();
if(ans.size()==1)
g<<ans[0];
else
for(i=0;i<ans.size()-1;i++)
g<<ans[i]<<" ";
}