Pagini recente » Cod sursa (job #1741466) | Cod sursa (job #663148) | Cod sursa (job #1642003) | Cod sursa (job #638596) | Cod sursa (job #2911980)
#include <cstdio>
#include <vector>
using namespace std;
FILE *fin, *fout;
#define NMAX 100000
vector<int> graph[NMAX + 5];
int n;
bool euler()
{
int i;
for(i = 1; i <= n; i++)
{
if(graph[i].size() % 2 != 0)
return false;
}
return true;
}
struct edge
{
int start, finish;
};
vector <edge> edges;
#define MMAX 500000
bool viz[MMAX + 5];
int rez[MMAX + 5] , k;
void dfs(int node)
{
for(int i = 0; i < graph[node].size(); i++)
{
int e = graph[node][i];
if(viz[e] == 0)
{
viz[e] = 1;
dfs(edges[e].start + edges[e].finish - node);
}
}
rez[++k] = node;
}
int main()
{
fin = fopen("ciclueuler.in", "r");
fout = fopen("ciclueuler.out", "w");
int m;
fscanf(fin, "%d%d", &n, &m);
int u, v, i;
edges.reserve(m);
for(i = 0; i < m; i++)
{
fscanf(fin, "%d%d", &u, &v);
edge e;
e.start = u;
e.finish = v;
edges.push_back(e);
graph[u].push_back(i);
graph[v].push_back(i);
}
/*for(i = 1; i <= n; i++)
{
fprintf(fout, "%d: ", i);
for(auto it : graph[i])
{
fprintf(fout, "%d ", it);
}
fprintf(fout, "\n");
}*/
if(euler() == false)
fprintf(fout, "-1");
else
{
dfs(1);
for(i = 2; i <= k; i++)
fprintf(fout, "%d ", rez[i]);
}
fclose(fin);
fclose(fout);
return 0;
}