Курсы по программированию

Формула программиста

основатель — Волосатов Евгений Витольдович
Поздравляю с 1 сентября! Система начисления Байтов работает.

Dancing Links / Открытие/закрытие столбцов

  • Мы продолжаем знакомство с гениальным алгоритмом X Дональда Кнута - Dancing Links.
    На этом уроке мы доработает функции AddRow() и Dance() в классе Dance().
    Так же реализуем функции Cover/Uncover().
  • Дата отправки отчёта: 28 июня 2017 г.
  • Задание выполнено: за 30 мин.
  • Чему научился: полностью написал алгоритм Х
  • Что было сложным: ничего
  • Комментарии: есть 2 вопроса:
    1. переменная step нужна для каких-то проверок? так как и без неё всё отлично работает.
    2. если на очередном шаге у нас получается header у которого size = 0, то нам нет смысла продолжать рекурсию
    и нужно вернуться на шаг назад, этого нет в текущей реализации алгоритма. Вопрос: я правильно рассуждаю? если да то как в рекурсии вернуться предыдущий уровень? return? он переместит нас на предыдущий уровень или вообще выбросит из рекурсии?
  • Оценка видео-уроку:
Отчёт от 13540 за Dancing Links / Открытие/закрытие столбцов




Оцени работу

 
Сохранить страницу:

1947. --
Denis
Denis
ответить
→  Алексей Малышев  # Dancing LInks / Открытие/закрытие столбцов / 2017-06-28 13:23

return завершает не всю рекурсию, а текущий вызов процедуры. Я думаю step нужен, чтобы видеть, на каком шаге мы находимся.


10558. --
Иван Воронин
Иван Воронин
ответить
→  Алексей Малышев  # Dancing LInks / Открытие/закрытие столбцов / 2017-06-28 22:19

всё верно, return возвращает из текущего ветвления в предыдущее.


1. --
Евгений Волосатов
Евгений Волосатов
ответить
→  Алексей Малышев  # Dancing LInks / Открытие/закрытие столбцов / 2017-06-28 22:55

step используется при сохранении ответов.
Впрочем, мы для этого использовали стек.
В любом случае - очень помогает step - знать, на каком уровне рекурсии находишься.
Но если программа уже полностью написана, то для оптимизации можно его убрать.



Начинаем практику по языку C#





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Научился: Реализовывать алгоритм
cell.row = row; headers[x].InsertUp(cell); headers[x].size++; Вместо InsertUp было написано InsertLeft. И это было ошибкой :( Программа пытается найти еще несколько вариантов. Но во втором случае она не указала 5 (это фигура E). И мы бы получили полностью собранную фигуру. В третьем случае ответ неверный полностью, так как при выбранных трех фигурах никак нельзя поставить четвертую. Думаю, что неправильные ответы получаются, так как мы не откатываемся до нужного состояния при первых неправильных ответах. Нужно сделать более подробную трассировку работы программы.


Научился: Пытаюсь разобраться как работает алгоритм
Трудности: Пока все непросто
Все получилось. Идут след в след. В противном случае будет уже не выбраться.