Cod sursa(job #2535209)

Utilizator EltMenimTirisi Claudiu EltMenim Data 31 ianuarie 2020 17:22:30
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<stack>
#include<list>
using namespace std;
ifstream f("ciclueuler.in");
ofstream o("ciclueuler.out");
int vf, x, y;
list<int>*Adj;
void addEdge(int x, int y){
Adj[x].push_back(y);
Adj[y].push_back(x);
}
int main(){

f>>vf>>x;
Adj=new list<int>[vf];
while(f>>x){
f>>y;
addEdge(x-1, y-1);
}

int v=0, c;
list<int>::iterator i;
stack<int> s;
s.push(v);

vector<int>cicle;
int n=0;

while(!s.empty()){

v=s.top();
s.pop();
while(!Adj[v].empty()){
c=Adj[v].front();

Adj[v].remove(c);

for(i=Adj[c].begin();i!=Adj[c].end();i++){

if((*i)==v){
Adj[c].erase(i);
break;
}

}


s.push(c);
n++;
}
cicle.push_back(v+1);
}

if(n==0){
o<<-1;
return 0;
}

o<<1<<" ";
for(int i=n-1;i>=1;i--){
o<<cicle[i]<<" ";
}

}