Cod sursa(job #2932702)

Utilizator namesurname01Name Surname namesurname01 Data 3 noiembrie 2022 18:49:03
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <vector>
#include <deque>

using namespace std;

#define N 100001

vector<int> graph[N];
bool viz[N];
deque<int> deq;


void euler(int node) {

	viz[node] = 0; //dar dupa ce l-am scos pot sa il bag iar.
	while(!graph[node].empty()) { //trebuie sa elimin muchiile prin care am trecut sa nu fac ciclu infinit
		int value = graph[node].back();
		graph[node].pop_back();
		if (!viz[value]) { //ma asigur sa nu bag acelasi nod de mai multe ori in coada
			viz[value] = 1;
			euler(value);
		}
	}
	deq.push_back(node);
}

int main() {
	ifstream f("ciclueuler.in");
	ofstream g("ciclueuler.out");
	int nodes, arcs, a, b;
	f >> nodes >> arcs;
	for (int i = 1; i <= arcs; ++i) {
		f >> a >> b;
		graph[a].push_back(b);
	}
	for (int i = 1; i <= nodes; ++i) {
		if (graph[i].size() % 2 != 0) {
			g << -1;
		}
	}
	euler(1);
	while (!deq.empty()) {
		g << deq.back() << " ";
		deq.pop_back();
	}
	f.close();
	g.close();
	return 0;
}