Pagini recente » Cod sursa (job #2314886) | Cod sursa (job #2112266) | Cod sursa (job #1929860) | Cod sursa (job #1410094) | Cod sursa (job #3189389)
#include <bits/stdc++.h>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
class graph{
private:
int n,m,ok;
vector<vector<pair<int,int>>> adj;
vector<int> grad;
vector<int> ciclu;
vector<bool> vism;
public:
graph(int n, int m):n(n),m(m)
{
adj.resize(n+1);
grad.resize(n+1,0);
vism.resize(m+1,false);
ok=0;
}
void addAdj(int x,int y,int i)
{
///cout<<x<<" "<<y<<endl;
if(x!=y)
{
adj[x].push_back({y,i});
adj[y].push_back({x,i});
grad[x]++;
grad[y]++;
}
else{
adj[x].push_back({y,i});
grad[x]+=2;
}
}
void euler(int v)
{
while(adj[v].size())
{
int nod=adj[v].back().first;
int i=adj[v].back().second;
adj[v].pop_back();
if(!vism[i])
{
vism[i]=true;
euler(nod);
}
}
ciclu.push_back(v);
}
bool isEuler()
{
for(int i=1;i<=n;i++)
{
if(grad[i]%2==1)
return false;
}
return true;
}
void afisareCiclu()
{
for(int i=0;i<ciclu.size()-1;i++)
g<<ciclu[i]<<" ";
}
};
int main() {
int n,m,x,y;
f>>n>>m;
graph graf(n,m);
for(int i=1;i<=m;i++)
{
f>>x>>y;
graf.addAdj(x,y,i);
}
if(graf.isEuler()==true)
{
graf.euler(1);
graf.afisareCiclu();
}
else g<<-1<<endl;
return 0;
}