Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Теория программирования > Игры разума
Перезагрузить страницу Восемь ферзей возвращение двухмерного массива
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
bookman bookman вне форума
Новичок
 
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.04.2008
По умолчанию Восемь ферзей возвращение двухмерного массива - 18.04.2008, 12:16

Написано на языке Rubу.
Возвращает двумерный массив вариантов. Каждый одномерный массив (внутри)
это вариант решения. Позиция числа в одномерном массиве -- это размещение ферзя по горизонтали
число в одномерном масиве -- размещения ферзя по вертикали.
Пустых позиций быть не может -- это очевидно. Ведь число ферзей совпадает со стороной квадрата
(т. е. с колчеством клеток на стороне), поэтому будут заняты все строки и стролбцы одной фигурой соответственно.

Число N позволяет расставлять N ферзей на доске размером N*N.

Код:
N=8
m=Array.new(N)
def mtrue(arr,num)
    var=false
    (0 ... num).to_a.reverse.each{
        |i|
        d=num-i
        var = ( (arr[i]==arr[num]) || (arr[i]==arr[num]-d) || (arr[i]==arr[num]+d) )
        break if var
    }
    return !var
end

def miter(arr, pos)
p arr if arr.compact.uniq.size==N

  if pos<N
      
      then
      (0 ... N).to_a.each{ |i|
          arr[pos]=i
          if mtrue(arr,pos)
              then miter(arr, pos+1)
              else arr[pos]=nil
          end
      }
      
  end

end
miter(m,0)
Предлагайте варианты. Удачи.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое выделение памяти для матрицы (двухмерного массива) (С++) nagem Вопросы начинающих программистов 1 04.05.2011 22:56
Создание двухмерного массива illuminati Алгоритмы 3 26.09.2010 20:23
Преобразование двухмерного массива Svetlyachok Вопросы начинающих программистов 4 20.04.2009 17:21
Паскаль.Задача на обработку двухмерного массива. maximl Pascal 2 22.12.2008 22:32
MSI и восемь слотов DIMM VipeR Новости 6 30.05.2008 19:09
8 ферзей loki144 Prolog 0 19.04.2008 16:16
Возвращение массива функцией elnik С/С++ 5 22.02.2008 12:13
Расстановка ферзей на доске как реализовать Sever Lisp 1 27.04.2005 11:26
И опять про восем ферзей. Shnur Prolog 0 29.12.2004 19:49
Логическая задача про 8 ферзей. tulya Prolog 1 11.12.2004 23:20
Создание и заполнение двухмерного массива. Указатели SkiV С/С++ 13 02.06.2004 01:56
Создание квадратного двухмерного массива Alan Вопросы начинающих программистов 3 25.05.2004 13:50



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов