Pagini recente » Cod sursa (job #275504) | Cod sursa (job #2465956) | Cod sursa (job #2269555) | Cod sursa (job #387226) | Cod sursa (job #964444)
Cod sursa(job #964444)
#include <fstream>
#include <vector>
#define N_MAX 262144
using namespace std;
bool vizitat[N_MAX];
vector <int> graf[N_MAX];
int n;
vector <int> ciclu;
void euler(int v)
{
int w;
vector <int>::iterator it;
while(!graf[v].empty())
{
w = graf[v].at(0);
graf[v].erase(graf[v].begin());
for(it=graf[w].begin();it!=graf[w].end();++it)
if(*it == v)
{
graf[w].erase(it);
break;
}
euler(w);
}
ciclu.push_back(v);
}
bool df_term()
{
for(int i=0;i<n;++i)
if(vizitat[i] == 0)
return 0;
return 1;
}
bool df(int nod_curent = 0)
{
vizitat[nod_curent] = 1;
if(df_term())
return 1;
for(unsigned int i=0;i<graf[nod_curent].size();++i)
{
if(!vizitat[graf[nod_curent][i]])
{
if(df(graf[nod_curent][i]))
return 1;
}
}
vizitat[nod_curent] = 0;
return 0;
}
int main()
{
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int d[N_MAX],i,m,x_nou,y_nou;
f>>n>>m;
for(i=0;i<m;++i)
{
f>>x_nou>>y_nou;
--x_nou;
--y_nou;
graf[x_nou].push_back(y_nou);
graf[y_nou].push_back(x_nou);
++d[x_nou];++d[y_nou];
}
for(i=0;i<n;++i)
{
if(d[i]%2 != 0)
{f.close();return 0;}
vizitat[i] = 0;
}
vizitat[0] = 1;
if(!df()) {g<<"-1";f.close();g.close();}
euler(0);
m = ciclu.size() - 1;
for(i=0;i<m;++i)
g<<ciclu[i]+1<<" ";
f.close();
g.close();
return 0;
}