Cod sursa(job #1491558)

Utilizator tain1234andrei laur tain1234 Data 25 septembrie 2015 17:52:19
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <stack>
#include <vector>
#include <fstream>
using namespace std;
vector<int> No[100001];
int gr[100001];
vector<int> cicle;
ifstream f("ciclueuler.in");
ofstream of("ciclueuler.out");
void euler(int root){
	stack<int> s;
	s.push(root);
	while (!s.empty()){
		int x = s.top();
		if (No[x].size() > 0){
			int c = No[x].back();
			No[x].pop_back();
			s.push(c);
			No[c].erase(find(No[c].begin(), No[c].end(), x));
		}
		else{
			cicle.push_back(x);
			s.pop();
		}
	}
}
int main(){
	int N, M, a, b;
	f >> N >> M;
	for (int i = 0; i < M; ++i){
		f >> a >> b;
		No[a].push_back(b);
		No[b].push_back(a);
		++gr[a]; ++gr[b];
	}
	for (int i = 1; i <= N; ++i)
	if (gr[i] % 2 == 1) {
		of << -1; return 0;
}
	euler(1);
	for (int i = 0; i < cicle.size() - 1; ++i)
		of << cicle[i] << " ";
}