130
правок
Изменения
→Псевдокод
<font color=darkgreen>//Элементы нумеруются начиная с 1 </font color=darkgreen>
'''list'''<permutation> gray_code(n):
'''permutation''' p perm = {1, ... , n} '''array''' d dir = {←, ... , ←} '''list'''<permutation> result
('''while''' true)
'''int''' id = -1; <font color=darkgreen> //индекс наибольшего подвижного элемента </font color=darkgreen>
('''for''' i = 1 '''to''' n)
'''if''' (pperm[i] - подвижный) '''and''' ((id == -1) '''or''' (pperm[i] > pperm[id]))
id = i
'''if''' (id == -1) '''break''' <font color=darkgreen> //не нашли подвижного элемента</font color=darkgreen>
('''for''' i = 1 '''to''' n){
'''if''' (pperm[i] > pperm[id]) reverse(ddir[i]) <font color=darkgreen> //меняем направление стрелки</font color=darkgreen> swap(id) <font color=darkgreen> //меняем элемент pperm[id], ddir[id] c элементом по направлению стелки</font color=darkgreen> '''return''' result
</code>