Pagini recente » Cod sursa (job #429992) | Cod sursa (job #3176685) | Cod sursa (job #714752) | Cod sursa (job #1615131) | Cod sursa (job #2579573)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <stack>
#include <algorithm>
using std::cout;
using std::endl;
using std::cin;
using std::vector;
using std::queue;
using std::stack;
using std::fstream;
using std::ios;
using std::sort;
fstream file1("ciclueuler.in", ios::in);
fstream file2("ciclueuler.out", ios::out);
int nr_noduri, nr_muchii;
vector<int> vecini[100005];
vector<bool> vizitat(100005);
stack<int> stiva;
void form_vecini();
bool contine_ciclu_euler();
void dfs(int st);
int main(int argc, char** argv) {
file1 >> nr_noduri >> nr_muchii;
form_vecini();
if (!contine_ciclu_euler()) {
file2 << -1;
}
else {
dfs(1);
while (stiva.size() > 1) {
file2 << stiva.top() << ' ';
stiva.pop();
}
}
file1.close();
file2.close();
return 0;
}
void dfs(int st) {
stiva.push(st);
while (!stiva.empty()) {
int nod = stiva.top();
if (!vecini[nod].size()) {
return;
}
int temp = vecini[nod].back();
stiva.push(temp);
vecini[nod].pop_back();
vecini[temp].erase(find(vecini[temp].begin(), vecini[temp].end(), nod));
}
}
bool contine_ciclu_euler() {
for (int i{ 1 }; i <= nr_noduri; i++) {
if (vecini[i].size() % 2 == 1) {
return false;
}
}
return true;
}
void form_vecini() {
int i, j;
while (file1 >> i >> j) {
vecini[i].push_back(j);
vecini[j].push_back(i);
}
}