forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   Расстановка. (http://forum.boolean.name/showthread.php?t=4203)

Chrono Syndrome 19.08.2007 22:56

Расстановка.
 
Условие: имеются двумерный (высота и ширина известны) массив, и список значений.
Задача: при любых размерах массива симметрично расставить по его углам значения списка.

Вот все никак не могу довести до ума алгоритм решения этой задачи... Есть идеи ?

jimon 19.08.2007 23:49

Re: Расстановка.
 
1)если список значений больше чем width*height/4 то задача не решается

2)уместить етот список значений в масив width/2,height/2

в принципе решать ее надо не очень сложным перебором
клетки заполняем "волной" ... тоесть 0,0 ; 1,0 ; 1,1 ; 0,1; 2,0 ; 2,1 ; 2,2; 1,2 ; 0,2;

так чтобы масив чисел 1,2,3,4,5,6,7,8,9 уместился вот так :
12500
43600
98700
00000

хотя тут мона и по извращатся :)

3)скопировать етот масив в 4 угла инвертировав
тоесть в левый угол скопировать оригинал, в правый инверсию по X
тоже самое с высотой

Chrono Syndrome 20.08.2007 11:01

Re: Расстановка.
 
Цитата:

3)скопировать етот масив в 4 угла инвертировав
тоесть в левый угол скопировать оригинал, в правый инверсию по X
тоже самое с высотой
Вот я так и делаю. Проблемы начинаются с неквадратными массивами, когда число элементов в списке приближается к этому самому width * height / 4...

jimon 20.08.2007 13:03

Re: Расстановка.
 
хм я тут подумал что width и height должны быть кратны 2
иначе ты общий масив не поделиш на 4 части :)
в принципе ето условие для простого решения задачи

теоретически я думаю ее возможно решить при общем условии
размер масива с числами * 4 <= width * height

первоначально надо выделить из общего масива 1/4 часть
и сделать из нее одномерный масив,

к примеру вот у нас игровая область :
0000
0000
0000
если ее делить на 4 части
при размере масива с числами = 3 то выйдет так
(числами обозначены номер части масива)
1133
1243
2244
или так
1133
2134
2244

в общем нам надо получить только номера клеток для первого под масива

потом все просто - превращаем его в одномерный масив по алгоритму
который я описал в 2 посте пункт 2 :)
размер етого масива будет => размера масива с числами

заполняем псевдо-случайно,
но так чтобы генератор чисел генерировал "ближе" к нулю
(при такой генерации юниты будут только с краев карты)

после всего етого берем етот одномерный масив и копируем в первый блок общего масива
потом собсно инверсно копируем в остальные 4

ps. а задача оказалась чуть сложнее чем я думал
но imho тут нету ничего уж слишком сложного

Chrono Syndrome 20.08.2007 16:57

Re: Расстановка.
 
Ладно, буду пробовать.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot