![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 07.12.2009
Сообщений: 13
|
![]()
Задача такова: дано шахматное поле размера n*n (n in [4..20]). Необходимо расставить максимально возможное количество ферзей и вывести на экран все возможные решения (координаты ферзей).
Идея решения такова: Есть 4 массива - 2 на диагонали и по одному на вертикали и горизонтали (все массивы - типа булеан). Поставленный ферзь в точке (i,j) закрывает другие клетки: hor[i], vert[j], diag1[i+j], diag2[i-j]. (свою вертикаль, свою горизонталь и соответственно две диагонали на которых он стоит) В главной рекурсивной процедуре происходит проверка. Если все ферзи расставлены, то выводим координаты ферзей, иначе рассматриваем данную строчку (номер строки передается в процедуру в виде параметра) по столбцам. Т.е. если в этой строчке столбец свободен, то туда встает ферзь, который перекрывает ряд клеток по правилу описанному выше. После постановки ферзя процедура вызывает саму себя с проверкой следующей строки. Потом убирает ферзя. Надеюсь, что идея ясна. Если требуются какие-то пояснения, то я готов рассказать подробнее. Эту задачку мне дали на одних курсах и хотя я вроде понял идею и моя программа даже должна была по идеи выводить все правильно, но что-то не работает. Могу конечно прислать свой код, но на самом деле надеюсь что кто-нибудь придумает, возможно более рациональный вариант решения, чем изложенный выше (однако просьба сохранить рекурсию в решении). Буду рад не только коду программы, но и хотя бы варианту решения. В-общем, если кто-то может помочь - буду рад. Заранее спасибо за помощь. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача минимизации дисбаланса на линии сборки (задача минимакса) | 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 |