Pagini recente » Cod sursa (job #970470) | Cod sursa (job #3333459) | Cod sursa (job #2808050) | Cod sursa (job #1982855) | Cod sursa (job #3333458)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n,m;
vector<pair<int,int>> G[100005];
vector<bool> viz(100005, false);
vector<int> indice;
vector<int> grade;
vector<int> ciclu;
void euler(int node){
while (G[node].empty()==false){
int muchieVizitata=G[node].back().second;
auto vecin=G[node].back();
G[node].pop_back();
if (indice[muchieVizitata]==0){
indice[muchieVizitata]=1;
euler(vecin.first);
}
}
ciclu.push_back(node);
}
void DFS(int node){
viz[node]=true;
for (auto &vecin:G[node]){
int x=vecin.first;
if (!viz[x]){
DFS(x);
}
}
}
int main(){
f>>n>>m;
indice.resize(m+1, 0);
grade.resize(n+1, 0);
for (int i=1;i<=m;i++){
int nod1, nod2;
f>>nod1>>nod2;
G[nod1].push_back({nod2,i});
G[nod2].push_back({nod1,i});
grade[nod1]++;
grade[nod2]++;
}
DFS(1);
bool ok=true;
for(int i=1;i<=n;i++) {
if(!viz[i] || grade[i]%2==1) {
ok=false;
}
}
if (ok==false){
g<<-1;
}
else {
euler(1);
for (int i=0;i<=ciclu.size();i++){
g<<ciclu[i]<<" ";
}
}
}