Pagini recente » Cod sursa (job #2305070) | Cod sursa (job #412458) | Cod sursa (job #3174923) | Cod sursa (job #2593716) | Cod sursa (job #1508185)
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector <int> G[100001];
stack <int> stiva;
int i,j,n,m,x,y,vf,N,L[100001],Rez[100001],ok;
bool viz[100001];
void dfs(int nod){
viz[nod]=1;
for(int j=0;j<G[nod].size();j++)
if(viz[G[nod][j]]==0)
dfs(G[nod][j]);
}
void euler(int k){
}
int main()
{f>>n>>m;
for(i=1;i<=m;i++){
f>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
for(i=1;i<=n;i++){
L[i]=G[i].size();
if(L[i]==1)
g<<-1;
ok=1;
}
for(i=1;i<=n;i++)
if(L[i]>0)
{
vf=i;
dfs(i);
break;
}
for(i=1;i<=n;i++)
if(viz[i]==0&&L[i]>0){
g<<-1;
ok=1;
}
stiva.push(vf);
while(stiva.empty()!=1){
vf=stiva.top();
L[vf]=G[vf].size();
if(L[vf]>0)
{
int nou=G[vf].back();
stiva.push(nou);
G[nou].erase(find(G[nou].begin(), G[nou].end(), vf));
G[vf].pop_back();
}
else
{
Rez[++N]=vf;
stiva.pop();
}
}
if(ok==0)
for(i=1;i<N;i++)
g<<Rez[i]<<" ";
return 0;
}