Pagini recente » Cod sursa (job #41744) | Cod sursa (job #2397743) | Cod sursa (job #595597) | Cod sursa (job #2290820) | Cod sursa (job #727820)
Cod sursa(job #727820)
#include<fstream>
#include<list>
#include<stack>
#include<vector>
#define _NM 100005
using namespace std;
typedef list<int>::iterator lit;
void delete_edge(list<int> vAd[], int nod1, int nod2)
{
for (lit it=vAd[nod1].begin();it!=vAd[nod1].end();++it)
if (*it==nod2)
{
vAd[nod1].erase(it);
break;
}
//
for (lit it=vAd[nod2].begin();it!=vAd[nod2].end();++it)
if (*it==nod1)
{
vAd[nod2].erase(it);
break;
}
}
int main()
{
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int nN,nM;
fin>>nN>>nM;
static list<int> vAd[_NM];
for (int i=1;i<=nM;i++)
{
int nod1,nod2;
fin>>nod1>>nod2;
vAd[nod1].push_back(nod2);
vAd[nod2].push_back(nod1);
}
for (int i=1;i<=nN;i++)
if (vAd[i].size()%2!=0)
{
fout<<-1;
return 0;
}
//
stack<int> s;
vector<int> sol;
s.push(1);
while(!s.empty())
{
int cur=s.top();
if (vAd[cur].size()==0)
{
sol.push_back(cur);
s.pop();
}
else
{
s.push(vAd[cur].front());
delete_edge(vAd, cur, vAd[cur].front());
}
}
for (unsigned i=0;i<sol.size()-1;i++)
fout<<sol[i]<<' ';
return 0;
}