Pagini recente » Cod sursa (job #1820265) | Cod sursa (job #3039264) | Cod sursa (job #1766983) | Cod sursa (job #1491875) | Cod sursa (job #1379299)
#include <cstdio>
#include <stack>
#include <vector>
using namespace std;
#define MAXM 500005
#define MAXN 100005
struct muchie
{
int a, b;
bool ex;
};
struct pr
{
int nod, id;
};
vector<int> v[MAXN], sol;
stack<pr> st;
muchie muc[MAXM];
int n, m;
void eul(int sursa);
int main()
{
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
int i, a, b;
scanf("%d%d", &n, &m);
for(i=1; i<=m; i++)
{
scanf("%d%d", &a, &b);
v[a].push_back(i);
v[b].push_back(i);
muc[i].a = a; muc[i].b = b; muc[i].ex = 1;
}
eul(muc[1].a);
vector<int>::iterator it;
for(int i=0; i<sol.size() - 1; i++)
printf("%d ", sol[i]);
return 0;
}
void eul(int sursa)
{
int tata, fiu, vec;
vector<int>::iterator it;
pr p;
p.nod = sursa; p.id = 1;
st.push(p);
while(!st.empty())
{
tata = st.top().nod;
vec = 0;
for(it=v[tata].begin(); it!=v[tata].end(); ++it)
if(muc[*it].ex)
vec++;
if(!vec)
{
sol.push_back(st.top().id);
st.pop();
}
for(it=v[tata].begin(); it!=v[tata].end(); ++it)
{
if(muc[*it].ex)
{
if(muc[*it].a == tata)
fiu = muc[*it].b;
else
fiu = muc[*it].a;
muc[*it].ex = 0;
p.nod = fiu; p.id = *it;
st.push(p);
break;
}
}
}
}