Pagini recente » Cod sursa (job #2166604) | Cod sursa (job #1491327) | Cod sursa (job #2312900) | Cod sursa (job #2551208) | Cod sursa (job #3005150)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
const int NMAX = 1e5;
const int MMAX = 5e5;
int n, m;
pair<int, int> muchii[MMAX + 5];
vector<vector<int>> edges;
vector<int> sol;
int viz[MMAX + 5];
void euler()
{
stack<int> st;
st.push(1);
while (!st.empty())
{
int node = st.top();
if (!edges[node].empty())
{
int x = edges[node].back();
edges[node].pop_back();
if (!viz[x])
{
st.push({(muchii[x].first == node) ? muchii[x].second : muchii[x].first});
viz[x] = 1;
}
}
else
{
st.pop();
sol.push_back(node);
}
}
}
int main()
{
cin >> n >> m;
edges.resize(n + 1);
for (int i = 1; i <= m; i++)
{
int a, b;
cin >> a >> b;
edges[a].push_back(i);
edges[b].push_back(i);
muchii[i] = {a, b};
}
euler();
for (int i = 0; i < sol.size() - 1; i++)
cout << sol[i] << ' ';
return 0;
}