Pagini recente » Cod sursa (job #3121495) | Cod sursa (job #1452566) | Cod sursa (job #1580728) | Cod sursa (job #582476) | Cod sursa (job #2158447)
#include <iostream>
#include <fstream>
#include <stack>
#include <vector>
#define nmax 100005
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector < pair< int , int > > G[nmax];
stack < int > S;
int n,m,visited[nmax*5],k,sol[nmax*5],x,y,nodStiva;
void dfs(int nod)
{
int nodStiva, vecin, indMuchie;
S.push(nod);
while(!S.empty()) {
nodStiva=S.top();
if( !G[nodStiva].empty()){
vecin=G[nodStiva].back().first;
indMuchie = G[nodStiva].back().second;
G[nodStiva].pop_back();
if(!visited[indMuchie]) {
visited[indMuchie] = true;
S.push(vecin);
}
}
else{
k++;
sol[k]=nodStiva;
S.pop();
// if(S.empty() == false) fout<<nodStiva<<" ";
}
}
}
int main()
{
fin>>n>>m;
for(int i =1 ; i <=m ;i++)
{
fin>>x>>y;
G[x].push_back(make_pair(y,i));
G[y].push_back(make_pair(x,i));
}
//verific grad
for(int i = 1; i <= n ;i++)
{
if(G[i].size()%2==1)
{
fout<<-1;
return 0;
}
}
dfs(1);
for(int i = 1; i < k ; i++)
fout<<sol[i]<<" ";
fout<<'\n';
}