Pagini recente » Cod sursa (job #2579706) | Cod sursa (job #2753908) | Cod sursa (job #1590974) | Cod sursa (job #1331751) | Cod sursa (job #727834)
Cod sursa(job #727834)
#include<fstream>
#include<list>
#include<stack>
#include<vector>
#define _NM 100005
using namespace std;
typedef list<int>::iterator lit;
void delete_edge(list<int> lAd[], int nod1, int nod2)
{
for (lit it=lAd[nod1].begin();it!=lAd[nod1].end();++it)
if (*it==nod2)
{
lAd[nod1].erase(it);
break;
}
//
for (lit it=lAd[nod2].begin();it!=lAd[nod2].end();++it)
if (*it==nod1)
{
lAd[nod2].erase(it);
break;
}
}
int main()
{
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int nN,nM;
fin>>nN>>nM;
static list<int> lAd[_NM];
static int grad[_NM];
for (int i=1;i<=nM;i++)
{
int nod1,nod2;
fin>>nod1>>nod2;
lAd[nod1].push_back(nod2); grad[nod1]++;
lAd[nod2].push_back(nod1); grad[nod2]++;
}
for (int i=1;i<=nN;i++)
if (grad[i]%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, cur, lAd[cur].front());
}
}
for (unsigned i=0;i<sol.size()-1;i++)
fout<<sol[i]<<' ';
return 0;
}