def sousedi(v,E): s1 = set( y for x,y in E if x==v ) s2 = set( x for x,y in E if y==v ) return [ z for z in s1+s2 ] def najdi_cestu(n,E): E += [ (n,x) for x in range(n) ] + [ (n,n+1) ] cesta = [ n+1, n ] for kolo in range(n): kde = cesta[-1] kam_muzeme = sousedi( kde, E ) kam_muzeme.remove( cesta[-2] ) ostatni_hrany = [ x,y for x,y in E if x!=kde and y!=kde ] + \ [ (kde,cesta[-2]) ] while len(kam_muzeme) > 1: cnt = len(kam_muzeme) k1, k2 = kam_muzeme[:cnt//2], kam_muzeme[cnt//2:] if cesta( n+2, ostatni_hrany + [ (kde,x) for x in k1 ] ): kam_muzeme = k1 else: kam_muzeme = k2 vitez = kam_muzeme[0] cesta.append( vitez ) E = ostatni_hrany + [ (kde,vitez) ] return cesta[2:]