Pagini recente » Cod sursa (job #9944) | Cod sursa (job #2445879) | Cod sursa (job #3266874) | Cod sursa (job #783550) | Cod sursa (job #2127196)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
struct muchie{
int to, cod;
};
int n, m, c;
vector<muchie> L[100000];
bool viz[100000], ales[500000];
void parcurge(int v){
viz[v]=true;
for (size_t i=0; i<L[v].size(); i++)
if (!viz[L[v][i].to]){
viz[L[v][i].to]=true;
parcurge(L[v][i].to);
}
}
bool conex(){
parcurge(0);
for (int i=0; i<n; i++)
if (!viz[i])
return false;
return true;
}
bool gradPar(){
for (int i=0; i<n; i++)
if (L[i].size() %2 ==1)
return false;
return true;
}
int main(){
fstream f ("ciclueuler.in", ios_base::in);
f >> n >> m;
for (int i=0; i<m; i++){
int x, y;
f >> x >> y;
x--; y--;
L[x].push_back({y, c});
L[y].push_back({x, c++});
}
f.close();
f.open("ciclueuler.out", ios_base::out);
if (!conex() && !gradPar())
f << -1;
else{
stack<int> S;
int r;
size_t q;
S.push(0);
while (!S.empty()){
r=S.top(); S.pop();
q=0;
while (q<L[r].size() && ales[L[r][q].cod]) q++;
if (q!=L[r].size()){
ales[L[r][q].cod]=true;
S.push(r);
S.push(L[r][q].to);
}
else
f << r+1 << ' ';
}
}
f.close();
return 0;
}