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

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2011, 23:56   #1
FCShadow
Пользователь
 
Регистрация: 07.12.2009
Сообщений: 13
Смущение Задача о ферзях.

Задача такова: дано шахматное поле размера n*n (n in [4..20]). Необходимо расставить максимально возможное количество ферзей и вывести на экран все возможные решения (координаты ферзей).

Идея решения такова:
Есть 4 массива - 2 на диагонали и по одному на вертикали и горизонтали (все массивы - типа булеан). Поставленный ферзь в точке (i,j) закрывает другие клетки: hor[i], vert[j], diag1[i+j], diag2[i-j]. (свою вертикаль, свою горизонталь и соответственно две диагонали на которых он стоит)
В главной рекурсивной процедуре происходит проверка.
Если все ферзи расставлены, то выводим координаты ферзей, иначе рассматриваем данную строчку (номер строки передается в процедуру в виде параметра) по столбцам. Т.е. если в этой строчке столбец свободен, то туда встает ферзь, который перекрывает ряд клеток по правилу описанному выше. После постановки ферзя процедура вызывает саму себя с проверкой следующей строки. Потом убирает ферзя.

Надеюсь, что идея ясна. Если требуются какие-то пояснения, то я готов рассказать подробнее. Эту задачку мне дали на одних курсах и хотя я вроде понял идею и моя программа даже должна была по идеи выводить все правильно, но что-то не работает. Могу конечно прислать свой код, но на самом деле надеюсь что кто-нибудь придумает, возможно более рациональный вариант решения, чем изложенный выше (однако просьба сохранить рекурсию в решении). Буду рад не только коду программы, но и хотя бы варианту решения. В-общем, если кто-то может помочь - буду рад. Заранее спасибо за помощь.
FCShadow вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача минимизации дисбаланса на линии сборки (задача минимакса) LenZab Microsoft Office Excel 13 13.03.2011 22:51
Задача о восьми ферзях на Nemerle natalya_57 Помощь студентам 3 08.07.2010 11:36
программирование на Си(задача о ферзях) osichev Помощь студентам 4 04.10.2009 18:55