Pagini recente » Cod sursa (job #1528879) | Cod sursa (job #1230466) | Cod sursa (job #1804564) | Cod sursa (job #222779) | Cod sursa (job #2865745)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
struct Edge
{
int node;
int id;
};
int n, m;
vector <Edge> graph[100005];
bool visitedEdges[500005];
vector <int> ans;
int NextEdge(int node)
{
while (!graph[node].empty() && visitedEdges[graph[node].back().id])
{
graph[node].pop_back();
}
if (graph[node].empty())
{
return 0;
}
visitedEdges[graph[node].back().id] = true;
int nextEdge = graph[node].back().node;
graph[node].pop_back();
return nextEdge;
}
void Euler(int node)
{
while (int nextEdge = NextEdge(node))
{
Euler(nextEdge);
}
ans.push_back(node);
}
int main()
{
fin >> n >> m;
for (int i = 0; i < m; i++)
{
int a, b;
fin >> a >> b;
Edge newEdge = {b, i};
graph[a].push_back(newEdge);
newEdge = {a, i};
graph[b].push_back(newEdge);
}
Euler(1);
for (int i = 0; i < ans.size() - 1; i++)
{
fout << ans[i] << ' ';
}
fout << '\n';
}