Pagini recente » Cod sursa (job #1339387) | Cod sursa (job #1331496) | Cod sursa (job #2863333) | Cod sursa (job #2808803) | Cod sursa (job #1784835)
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int viz[100010], N, M,H[100010];
vector<int> G[100010],euler,stk;
void dfs(int x)
{
viz[x] = 1;
for (int i = 0;i < G[x].size();++i)
if (!viz[G[x][i]])
dfs(G[x][i]);
}
int main()
{
in >> N >> M;
for (int i = 1;i <= M;++i)
{
int x, y;
in >> x >> y;
H[x]++;
H[y]++;
G[x].push_back(y);
G[y].push_back(x);
}
for (int i = 1;i <= N;++i)
if (H[i] % 2 != 0)
{
out << -1;
return 0;
}
dfs(1);
for (int i = 1;i <= N;++i)
if (!viz[i])
{
out << -1;
return 0;
}
stk.push_back(1);
while (stk.size())
{
if (!H[stk.back()])
{
euler.push_back(stk.back());
stk.pop_back();
continue;
}
if (H[stk.back()])
{
int x = stk.back();
H[x]--;
H[G[x][G[x].size()-1]]--;
G[G[x][G[x].size() - 1]].erase(find(G[G[x][G[x].size() - 1]].begin(), G[G[x][G[x].size() - 1]].end(), stk.back()));
stk.push_back(G[x][G[x].size() - 1]);
G[x].pop_back();
}
}
for (int i = 0;i < euler.size()-1;++i)
out << euler[i] << " ";
return 0;
}