Pagini recente » Cod sursa (job #1374597) | Cod sursa (job #174609) | Cod sursa (job #1550907) | Cod sursa (job #1729407) | Cod sursa (job #1893854)
#include <fstream>
#include <vector>
using namespace std;
struct muchie {
int x, y;
};
vector<int>mv[100001], st; // muchii vecine
muchie m[500001]; // capetele muchiilor
int noduri, muchii, x, y;
bool viz[500001];
int main () {
ifstream fi("ciclueuler.in");
ofstream fo("ciclueuler.out");
fi >> noduri >> muchii;
for (int i = 1; i <= muchii; i++) {
fi >> x >> y;
mv[x].push_back(i);
mv[y].push_back(i);
m[i].x = x, m[i].y = y;
}
for (int i = 1; i <= noduri; i++)
if (mv[i].size() & 1) {
fo << -1; return 0;
}
st.push_back(1);
while (!st.empty()) {
int nc = st.back(); // nod curent
if (!mv[nc].size()) // am vizitat toate muchiile nodului curent
fo << nc << ' ', st.pop_back();
else {
int mc = mv[nc].back(); // muchie curenta
mv[nc].pop_back();
if (!viz[mc]) {
viz[mc] = 1;
// adaugam nodul vecin in stiva
if (m[mc].x == nc)
st.push_back(m[mc].y);
else
st.push_back(m[mc].x);
}
}
}
return 0;
}