Pagini recente » Istoria paginii runda/9_2/clasament | Statistici Gombos Kriszta (GombosKriszta) | Cod sursa (job #1275123) | Istoria paginii runda/moisilking/clasament | Cod sursa (job #1461269)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("ciclueuler.in") ;
ofstream fout ("ciclueuler.out") ;
int N , M , euler [ 100001 ] , lg ;
void Add ( int , int ) ;
void Citire ()
{
int a , b ;
fin >> N >> M ;
while ( M >= 1 )
{
fin >> a >> b ;
Add ( a , b ) ;
-- M ;
}
}
struct nod
{
int info ;
nod * next ;
} ;
nod * L [ 100001 ] ;
void Add ( int a , int b )
{
nod * p = new nod ;
p->info = b ;
p->next = L [a] ;
L [a] = p ;
p = new nod ;
p->info = a ;
p->next = L [b] ;
L [b] = p ;
}
void DeleteNode ( int k , int i ) // Sterge nodul i din lista L [k]
{
nod * cur , * pred = 0 ;
if ( L [k]->info == i )
{
cur = L [k] ;
L [k] = L [k]->next ;
delete cur ;
return ;
}
for ( cur = L [k] ; cur->next != 0 ; pred = cur , cur = cur->next ) ;
pred->next = cur->next ;
delete cur ;
}
void Euler ( int k )
{
int i ;
nod * p ;
while ( L [k] != 0 )
{
p = L [k] ;
i = p->info ;
L [k] = L [k]->next ;
delete p ;
DeleteNode ( i , k ) ;
Euler ( i ) ;
}
euler [ ++ lg ] = k ;
}
int main()
{
Citire () ;
Euler ( 1 ) ;
if ( lg == 0 )
fout << "-1" ;
for ( int i = 1 ; i <= lg ; ++ i )
fout << euler [i] << " " ;
return 0;
}