Pagini recente » Cod sursa (job #857343) | Cod sursa (job #188186) | Cod sursa (job #59686) | Cod sursa (job #2807542) | Cod sursa (job #1174486)
#include<fstream>
#include<vector>
#include<bitset>
using namespace std;
int n, m, Q[500001];
bitset<100000> degree;
vector<int> adj[100000];
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
bool is_eulerian() {
int i;
for(i = 0; i < n; i++) {
if(degree[i] == 1) return false;
}
return true;
}
void compute() {
int current;
Q[++Q[0]] = 0;
while(Q[0] > 0) {
current = Q[Q[0]];
if(adj[current].size() > 0) {
Q[++Q[0]] = adj[current].back();
adj[current].pop_back();
for(vector<int>::iterator it = adj[Q[Q[0]]].begin(); it != adj[Q[Q[0]]].end(); ++it) {
if(*it == current) {
adj[Q[Q[0]]].erase(it);
break;
}
}
} else {
Q[0]--;
if(Q[0]) fout << current+1 << " ";
}
}
}
int main() {
int i, u, v;
fin >> n >> m;
for(i = 0; i < m; i++) {
fin >> u >> v;
adj[u-1].push_back(v-1);
adj[v-1].push_back(u-1);
degree[u-1].flip();
degree[v-1].flip();
}
if(is_eulerian()) {
compute();
} else {
fout << -1;
}
return 0;
}