Mai intai trebuie sa te autentifici.
Cod sursa(job #601578)
Utilizator | Data | 7 iulie 2011 00:38:05 | |
---|---|---|---|
Problema | Ciclu Eulerian | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.24 kb |
#include <fstream>
#include <cstring>
#include <vector>
#include <queue>
#define X1 100001
using namespace std;
ifstream in;
ofstream out;
vector <int> v[X1];
queue <int> q;
int grad[X1];
inline void euler(int nod)
{
int x;
for(;v[nod].size();)
{
x=*v[nod].begin();
v[nod].erase(v[nod].begin());
for(vector <int>::iterator it=v[x].begin();it!=v[x].end();++it)
if(*it==nod)
{
v[x].erase(it);
break;
}
euler(x);
}
q.push(nod);
}
int main()
{
int M,N,x,y;
memset(grad,0,sizeof(grad));
in.open("ciclueuler.in");
in>>N>>M;
for(;M;--M)
{
in>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
++grad[x];
++grad[y];
}
in.close();
for(int i=1;i<=N;i++)
if(grad[i]%2)
{
out.open("ciclueuler.out");
out<<"-1\n";
out.close();
return 0;
}
euler(1);
q.pop();
out.open("ciclueuler.out");
while(!q.empty())
{
out<<q.front()<<' ';
q.pop();
}
out<<'\n';
out.close();
return 0;
}