Pagini recente » Cod sursa (job #461322) | Cod sursa (job #2512279) | Cod sursa (job #2426447) | Cod sursa (job #476801) | Cod sursa (job #1836927)
#include <fstream>
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <algorithm>
using namespace std;
bool is_eulerian(int n, vector<list<int>> Adj){
for(int i=1;i<=n;++i)
if(Adj[i].size() % 2 !=0)
return false;
queue<int> q;
vector<bool> visited(n+1,false);
q.push(1);
visited[1]=true;
while(!q.empty()){
int v = q.front();
q.pop();
for(auto &i : Adj[v])
if(!visited[i]){
visited[i]=true;
q.push(i);
}
}
for(int i=1;i<=n;++i)
if(!visited[i])
return false;
return true;
}
int main()
{
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m;
fin>>n>>m;
vector< list<int> > Adj(n+1);
for(int i=0;i<m;++i){
int a,b;
fin>>a>>b;
Adj[a].push_back(b);
Adj[b].push_back(a);
}
if(is_eulerian(n,Adj)){
list<int> ciclu;
stack<int> st;
st.push(1);
while(!st.empty()){
int v = st.top();
if(Adj[v].empty()){
ciclu.push_back(v);
st.pop();
}
else{
int w = Adj[v].front();
Adj[v].pop_front();
Adj[w].erase(find(Adj[w].begin(),Adj[w].end(),v));
st.push(w);
}
}
for(int &i : ciclu) fout<<i<<' ';
fout<<'\n';
}
else
fout<<"-1\n";
}