Pagini recente » Cod sursa (job #2206781) | Cod sursa (job #3146470) | Cod sursa (job #1020598) | Cod sursa (job #1161257) | Cod sursa (job #2958689)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ciclueulerian.in");
ofstream fout("ciclueulerian.out");
int n, m, i, nr1, nr2, aici, cuc;
vector <int>::iterator vecin;
int main()
{
fin >> n >> m;
vector <int> adjL[n+1];
for (i = 0; i < m; ++i){
fin >> nr1 >> nr2;
adjL[nr1].push_back(nr2);
adjL[nr2].push_back(nr1);
}
vector <int> ciclu;
ciclu.reserve(2*m+1);
stack <int> recurs;
recurs.push(1);
int nrmuch = 0;
while (!recurs.empty()){
aici = recurs.top();
if (!adjL[aici].empty()){
++nrmuch;
vecin = adjL[aici].begin();
cuc = *vecin;
adjL[aici].erase(vecin);
for (auto j = adjL[cuc].begin(); j < adjL[cuc].end(); ++j)
if (*j == aici){
adjL[cuc].erase(j);
break;
}
recurs.push(cuc);
continue;
}
ciclu.push_back(aici);
recurs.pop();
}
if (nrmuch != m){
fout << -1;
return 0;
}
for (i = ciclu.size()-1; i >= 1; --i){
fout << ciclu[i] << ' ';
}
return 0;
}