Pagini recente » Cod sursa (job #3131065) | Cod sursa (job #1484072) | Cod sursa (job #816290) | Cod sursa (job #2159671) | Cod sursa (job #1164473)
#include <fstream>
#include <vector>
#include <utility>
#include <bitset>
#define NMax 100003
#define Iter std::vector<>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
std::vector<int> G[NMax],Stiva;
std::bitset<NMax> viz;
int n,m,nod1,nod2,contor,contornod[NMax],x,y;
void euler(int x)
{
for(int i=0;i<G[x].size();++i)
{
if(viz[G[x][i]]==0)
{
viz[G[x][i]] = 1;
euler(G[x][i]);
}
}
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;++i)
{
fin>>nod1>>nod2;
G[nod1].push_back(nod2);
G[nod2].push_back(nod1);
++contornod[nod1];++contornod[nod2];
}
for(int i=1;i<=n;++i)
{
if(contornod[i]==1)
{
fout<<"-1";
return 0;
}
}
Stiva.push_back(1);
viz[1] = 1;
euler(1);
//Stiva.push_back(1);
while(!Stiva.empty())
{
x = Stiva.back();
if(!G[x].empty())
{
y = G[x].back();
G[x].pop_back();
for(int i=0;i<G[y].size();++i)
{
if(G[y][i]==x)
{
G[y][i] = G[y].back();
break;
}
}
G[y].pop_back();
Stiva.push_back(y);
}
else
{
if(Stiva.size()>1)fout<<Stiva.back()<<" ";
Stiva.pop_back();
}
}
return 0;
}