Pagini recente » Cod sursa (job #263929) | Cod sursa (job #3183537) | Cod sursa (job #1963686) | Cod sursa (job #1628301) | Cod sursa (job #988989)
Cod sursa(job #988989)
#include <fstream>
#include <vector>
#define IN "ciclueuler.in"
#define OUT "ciclueuler.out"
#define MAX_SIZE 100100
int N, M, K = -1, SOL[MAX_SIZE * 7], X[MAX_SIZE * 7], Y[MAX_SIZE * 7];
bool B[MAX_SIZE * 7];
std :: vector <int> G[MAX_SIZE];
std :: ifstream f(IN);
std :: ofstream g(OUT);
void READ_DATA()
{
f >> N >> M;
for(int i = 1; i <= M; ++i)
{
f >> X[i] >> Y[i];
G[ X[i] ].push_back(i);
G[ Y[i] ].push_back(i);
}
}
bool ITS_EULERIAN()
{
for(int i = 1; i <= N; ++i)
if(G[i].size() % 2) return 0;
return 1;
}
void EULER(int nod)
{
std :: vector <int> :: iterator it = G[nod].begin();
for(; it != G[nod].end(); ++it)
if(!B[*it])
{
B[*it] = 1;
EULER(X[*it] + Y[*it] - nod);
}
SOL[++K] = nod;
}
void WRITE()
{
if(K == -1) g << -1;
else for(int i = K; i >= 1; --i) g << SOL[i] << ' ';
g << '\n';
g.close();
}
int main()
{
READ_DATA();
if( ITS_EULERIAN() )
{
K = 0;
EULER(1);
}
WRITE();
return 0;
}