Pagini recente » Cod sursa (job #3175928) | Cod sursa (job #2941879) | Cod sursa (job #2949170) | Cod sursa (job #1113601) | Cod sursa (job #3005285)
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
#include <climits>
#include <stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
const int NMAX = 1000005;
vector < vector <int> > adjList;
vector < pair <int,int> > edges;
int dist[NMAX],viz[NMAX],sol[NMAX],cnt;
void euler(){
stack <int> st;
st.push(1);
while(!st.empty()){
int cand = st.top();
if(!adjList[cand].empty()){
int x = adjList[cand].back();
adjList[cand].pop_back();
if(!viz[x]){
st.push({edges[x].first == cand ? edges[x].second : edges[x].first});
viz[x] = 1;
}
}
else
{
st.pop();
sol[++cnt] = cand;
}
}
}
int main()
{
int n,m;
fin>>n>>m;
adjList.resize(n + 1);
edges.resize(m + 1);
int x,y;
for(int i = 1;i <= m;i++)
{
fin>>x>>y;
adjList[x].push_back(i);
adjList[y].push_back(i);
viz[x]++;
viz[y]++;
edges[i] = {x,y};
}
for(int i = 1;i <= n;i++)
{
if(viz[i] % 2)
{
fout<<"-1";
return 0;
}
viz[i] = 0;
}
euler();
for(int i = 1;i <= cnt;i++)
fout<<sol[i]<<" ";
return 0;
}