Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.12.2009, 00:55
Аватар для m0nzt3r
m0nzt3r m0nzt3r вне форума
Прохожий
 
Регистрация: 02.12.2008
Адрес: Россия, Москва
Сообщения: 7
Репутация: 11
По умолчанию Перестановки в матрице.

Здравствуйте. Есть поле M*N. Есть Q фигур. Нужно для всех возможных расстановок этих Q фигур выполнить над матрицей (полем) некие операции. Подскажите идею, как реализовать перебор возможных комбинаций.

Поле - целочисленная матрица. Фигуры - определенное число. Переставлять нужно в области, ограниченной крайними столбцами/строками, исключая их. Своеобразную "рамочку" не трогать.

Спасибо заранее.

Последний раз редактировалось m0nzt3r, 27.12.2009 в 00:59.
Ответить с цитированием
  #2  
Старый 27.12.2009, 01:02
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

3D-тетрис что-ли делаете?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 27.12.2009, 01:06
Аватар для m0nzt3r
m0nzt3r m0nzt3r вне форума
Прохожий
 
Регистрация: 02.12.2008
Адрес: Россия, Москва
Сообщения: 7
Репутация: 11
По умолчанию

Не, не тетрис. Кстати, расставляемые элементы - одинаковы. То бишь главное факт занимания ими ячейки, а в каком они порядке - не важно. Главное, чтобы все три были в трех разных местах. Суть - генерация всевозможных лабиринтов с Q закрашенными ячейками.
Ответить с цитированием
  #4  
Старый 29.12.2009, 13:24
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Т.е. Q меньше M*N и должны быть все расположены, каждая один раз - вот это перебрать ?
Ответить с цитированием
  #5  
Старый 29.12.2009, 13:28
Аватар для m0nzt3r
m0nzt3r m0nzt3r вне форума
Прохожий
 
Регистрация: 02.12.2008
Адрес: Россия, Москва
Сообщения: 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от s0Creator
Т.е. Q меньше M*N и должны быть все расположены, каждая один раз - вот это перебрать ?
Угу, все так и есть.
Ответить с цитированием
  #6  
Старый 29.12.2009, 14:55
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

С учетом того, что любой ячейке можно сопоставить число от 0 до (M*N-1) [i + j*M]. технология где-то так:
Массив размерностью Q ( ms[0] определяет положение первого элемента, ms[1] второго ...)
А дальше перебор с вложенностью Q
Т.е для каждого ms[0] (от 0 до (M*N-1) ) перебор всех ms[1] (от 0 до (M*N-1) ) где ms[0] <> ms[1]
для этой пары соответственно ms[2] (от 0 до (M*N-1) ) где ms[2]<>ms[0] и ms[2]<>ms[1].
По идее можно сделать универсальный алгоритм ( функцию )
Ответить с цитированием
  #7  
Старый 29.12.2009, 15:04
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

А наложить его потом на внутреннюю область думаю не трудно будет.
Если например принять что [0,0] соответствует [2,2] то [i,j] соотв. [i+2,j+2].
Ответить с цитированием
  #8  
Старый 29.12.2009, 21:51
Аватар для m0nzt3r
m0nzt3r m0nzt3r вне форума
Прохожий
 
Регистрация: 02.12.2008
Адрес: Россия, Москва
Сообщения: 7
Репутация: 11
По умолчанию

Уфф, что-то сложновато. Завтра попробую перечитать и осмыслить.
Ответить с цитированием
  #9  
Старый 30.12.2009, 11:21
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Набросал немного с использованием классов ( смотри UPerebor.pas )

Думаю еще попробовать попозже реализацию последевательного построения карты разными типами фигур ( если конечно стоит )
Или лучше попробовать перебор на карте с произвольно расположенными препятствиями ( Map[Row, Col] = 0 значит ячейка свободна ).
И заметил что надо заменить
PHP код:
function TFigursPerebor.FirstBoolean;
var
  
inInteger;
begin {$BOOLEVAL OFF}
  
Result := false;
  if (
FArrLen FCount) or (FCount <= 0then
    
Exit; // < фигуры не помещаются или их 0
  
SetLength(FFigursFCount);
  
:= 0;
  for 
:= 0 to FCount do
  
begin
    FFigurs
[i] := n;
    if (
not CheckByIndex(i)) and (not IncByIndex(i)) then 
      
Exit; // < это на будущее ( для произвольных препятствий )
    
:= FFigurs[i] + 1;
  
end;
  
Result := true;
end
Он сделан с расчетом на будущее
Вложения
Тип файла: zip perebor_figurs.zip (5.5 Кбайт, 1 просмотров)

Последний раз редактировалось s0Creator, 30.12.2009 в 17:00.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:21.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025