Pagini recente » Cod sursa (job #1424620) | Cod sursa (job #3230409) | Cod sursa (job #1715272) | Cod sursa (job #1468038) | Cod sursa (job #2837363)
#include <fstream>
#include <deque>
#include <vector>
using namespace std;
ifstream cin ("ciclueuler.in") ;
ofstream cout ("ciclueuler.out") ;
/// eulerian era cel care parcurge toate muchiile grafului cu posibile repetari ale nodurilor
/// observatia care permite rezolvarea problemei
/// un ciclu eulerian se poate imparti in cicluri disjuncte
vector<int> m[100009] ;
vector<int> rez ;
void ciclue(int nod)
{
if(nod == -1)return ;
while(m[nod].size() && m[nod].back() == -1)m[nod].pop_back() ;
while(m[nod].size())
{
int next = m[nod].back() ;
m[nod].pop_back() ;
for(int f = 0 ; f < m[next].size() ; f ++)
if(m[next][f] == nod){m[next][f] = -1 ; break ;}
ciclue(next) ;
}
rez.push_back(nod) ;
}
int main()
{
int n, q ;
cin >> n >> q ;
while(q --)
{
int a, b ;
cin >> a >> b ;
m[a].push_back(b) ;
m[b].push_back(a) ;
}
ciclue(1) ;
for(int f = 0 ; f < rez.size() - 1 ; f ++)
cout << rez[f] << " " ;
return 0;
}