Изменения

Перейти к: навигация, поиск

Коды Грея для перестановок

105 байт добавлено, 10:52, 7 декабря 2014
Псевдокод
=== Псевдокод ===
<code>
<font color=darkgreen> //Элементы нумеруются начиная с 1 </font color=darkgreen>
'''list'''< '''list'''<'''int'''> > gray_code(n):
'''list'''<'''int'''> perm = {1, \dots ... , n} '''list'''<'''char'''> dir = {←, \dots ... , ←}
'''list'''< '''list'''<'''int'''> > result
'''while''' (true)
result.append(perm); <font color=darkgreen> //добавляем в ответ текущую перестановку</font color=darkgreen> '''int''' id = -1; <font color=darkgreen> //индекс наибольшего подвижного элемента </font color=darkgreen>
'''for''' (i = 1 '''to''' n)
'''if''' (perm[i] - подвижный) '''and''' ((id == -1) '''or''' (perm[i] > perm[id]))
id = i
'''if''' (id == -1) '''break''' <font color=darkgreen> //не нашли подвижного элемента</font color=darkgreen>
'''for''' (i = 1 '''to''' n){
'''if''' (perm[i] > perm[id])
reverse(dir[i]) <font color=darkgreen> //меняем направление стрелки</font color=darkgreen> swap(id) <font color=darkgreen> //меняем элемент perm[id], dir[id] c элементом по направлению стелки</font color=darkgreen> '''return''' result
</code>
130
правок

Навигация