Pagini recente » Cod sursa (job #2829154) | Cod sursa (job #2172380) | Cod sursa (job #3149282) | Cod sursa (job #899366) | Cod sursa (job #727843)
Cod sursa(job #727843)
#include<fstream>
#include<list>
#include<stack>
#include<vector>
#define _NM 100005
using namespace std;
void delete_edge(list<int> lAd[], int nod1, int nod2)
{
for (list<int>::iterator it=lAd[nod1].begin();it!=lAd[nod1].end();++it)
if (*it==nod2)
{
lAd[nod1].erase(it);
break;
}
}
int main()
{
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int nN,nM;
fin>>nN>>nM;
static list<int> lAd[_NM];
for (int i=1;i<=nM;i++)
{
int nod1,nod2;
fin>>nod1>>nod2;
lAd[nod1].push_back(nod2);
lAd[nod2].push_back(nod1);
}
for (int i=1;i<=nN;i++)
if (lAd[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 (lAd[cur].size()==0)
{
sol.push_back(cur);
s.pop();
}
else
{
s.push(lAd[cur].front());
delete_edge(lAd,lAd[cur].front(),cur);
lAd[cur].pop_front();
}
}
for (unsigned i=0;i<sol.size()-1;i++)
fout<<sol[i]<<' ';
return 0;
}