Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача 12 коней, помогите решить 
:(
    Опции темы
proger
Дата 25.2.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 400
Регистрация: 10.10.2004

Репутация: нет
Всего: 1



Здрасти, нужно написать прогу, которая на шахматной доске раставит 12 коней так, чтобы все клетки доски были "битые" (под ударом).
Надо использовать двухмерный массив!
Результат должен быть примерно таким:
| 0 | 0 | * | * | k | 0 | * | k
| k | * | * | * | k | k | * | 0
| * | 0 | * | k | * | * | * | *
| 0 | * | k | * | * | * | * | 0
| * | 0 | * | * | * | 0 | k | *
| 0 | * | 0 | * | * | k | 0 | *
| * | 0 | * | * | * | * | 0 | *
| k | 0 | k | 0 | * | 0 | k | 0

Где * - поле под ударом, k - конь, 0 - не битое поле (их не должно быть!)
Спасибо!

PM MAIL   Вверх
III.nfo
Дата 25.2.2006, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 18.10.2004

Репутация: 2
Всего: 2



По-моему, надо сначала составить схему удара одним конём и "протаскивать" её по полю. Насчёт расположения: кони не должны быть рядом с краем доски (тк бьют на расстояние в клетку от себя) и, скорее всего, должны быть группами. Наверняка будет симметрия, т.е. можно сделать только часть работы и отразить через плоскость симметрии.
Вы уверены, что это возможно?
Вот "заливка" одним конём:
Код

0*0*0
*000*
00k00
*000*
0*0*0


Это сообщение отредактировал(а) III.nfo - 25.2.2006, 19:18
PM MAIL WWW   Вверх
SoWa
Дата 25.2.2006, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



А потом перебором коней по всей доске проставь.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
maxim1000
Дата 25.2.2006, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



на, например, перебором...
правда, придется перебирать 64^12 (ну чуть меньше из-за того, что два коня на одной клетке стоять не могут), а отсечений тут пока не видно...
...
ага... можно попробовать разделить задачу на две: растановка коней, которые бьют черные клетки, и тех, которые - белые...
тогда будет что-то вроде 2*(32^6), что уже обозримо...


--------------------
qqq
PM WWW   Вверх
ДобренькийПапаша
Дата 25.2.2006, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Модератор: пользуемся кнопкой Код - тогда и подсветка будет, и отступы сохранятся...
Код

Uses crt;
Const
    w:array[1..4,1..16] of integer=
            ((1,2,3,4,9,10,11,12,17,18,19,20,25,26,27,28),
               (8,16,24,32,7,15,23,31,6,14,22,30,5,13,21,29),
              (64,63,62,61,56,55,54,53,48,47,46,45,40,39,38,37),
             (57,49,41,33,58,50,42,34,59,51,43,35,60,52,44,36));
u:array[1..9] of integer=(0,-2,-2,2,2,1,1,-1,-1);
v:array[1..9] of integer=(0,1,-1,-1,1,2,-2,-2,2);
Var i,j,t,m,p:integer;
a:array[1..12] of byte;
a1:array[1..3] of byte;
c:array[1..8,1..8] of byte;
c0:array[1..8,1..8] of char;
Procedure PRINT;
Var k:integer;
Begin
k:=1;
for i:=1 to 4 do
begin
a[k]:=w[i,a1[j]];
write(a[k]:3);k:=k+1;
end;
m:=m+1; writeln('-(',m,')');
FillChar(c0, sizeof(c0),'.');
for k:=1 to 12 do
begin
i:=(a[k]-1) div 8+1;
j:=(a[k]-1) mod 8+1;
c0[i,j]:='o';
end;
for i:=1 to 8 do
begin for j:=1 to 8 do write(c0[i,j]:3);
writeln;
end; writeln;
End;
Procedure KON(k,d:integer);
Var i,j,z,k1,ik,jk:integer;
Begin
for k1:=1 to 4 do
begin
ik:=(w[k1,a1[k]]-1) div 8+1;
jk:=(w[k1,a1[k]]-1) mod 8+1;
for z:=1 to 9 do
begin
i:=ik+u[z];j:=jk+v[z];
if(i>=1)and(i<=8)and(j>=1)and(j<=8) then
begin
c[i,j]:=c[i,j]+d;
case d of
1:if c[i,j]=1  then p:=p+1;
-1:if c[i,j]=0 then p:=p-1;
end;
end;
end;
end;
End;
Procedure CNK(k,L,R:integer);
Var j:integer;
Begin
for j:=L to R do
begin
a1[k]:=j;
KON(k,1);
if k<3 then CNK(k+1, j+1, r+1)
else if p=64 then PRINT;
KON(k,-1);
end;
End;
BEGIN
clrscr;m:=0;p:=0;
CNK(1,1,14);
writeln('***END***');
readln;
END.

Добавлено @ 20:51
Довольно эффективный алгоритм.Предполагается, что расположение коней в квадратах одинаково с точностью до поворота на 90 градусов по часовой стрелке. Значения заносятся в двумерный массив. Находим все сочетания из 16 по 3 и для каждого ставим сразу 4 коня, т.е. всего 560 комбинаций. Доска разбивается на четыре части.

Это сообщение отредактировал(а) maxim1000 - 25.2.2006, 22:49


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
maxim1000
Дата 25.2.2006, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(ДобренькийПапаша @ 25.2.2006, 19:47 Найти цитируемый пост)
Предполагается, что расположение коней в квадратах одинаково с точностью до поворота на 90 градусов по часовой стрелке.

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


--------------------
qqq
PM WWW   Вверх
Akina
Дата 25.2.2006, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(maxim1000 @ 25.2.2006, 21:20 Найти цитируемый пост)
будет что-то вроде 2*(32^6), что уже обозримо...

Ну во-первых просто 32*31*30*29*28*27 = 652 458 240 (что уже сносно) - потому как потом любой вариант расстановки по черным полям комбинируется с любым вариантом расстановки по белым полям (которые получаем любым способом, например отразить относительно любой оси).
Во-вторых, отсечения все-таки будут (например обработка проверки что осталось полей менее чем 8 * число оставшихся к расстановке коней, и еще кой-какие мелочи) - проверять программно быстрее, чем считать заведомо тухлые варианты (при условии что надо найти все расстановки).




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
proger
Дата 26.2.2006, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 400
Регистрация: 10.10.2004

Репутация: нет
Всего: 1



maxim1000,
Вот сделал клетки какие бьет конь!
PM MAIL   Вверх
ДобренькийПапаша
Дата 26.2.2006, 23:58 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Моя прога работает. Не парьте мозги. Вычисляет расположение коней.

Кстати, я кандидат в мастера спорта по шахматам. Про поворачивание доски всё у меня правильно, maxim1000.

Забейте, задача решена.


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
mes
Дата 27.2.2006, 04:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: нет
Всего: 250



пойдем от конца. Нам надо чтоб все клетки были битые. Начнем с cамых трудных - ето угловые клетки(a1,а2,b1,b2 и симетричные им)

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

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

Oсталось по два на угол и по две клетки(такие как а1,b2) Для каждой из етих клеток существует три позиции коня (например для клетки а1 ето а1,c2,b3). т.е. когда поле занято конём или когда оно битое.

можно расмотреть следующее поле.(а3) Тогда мы узнаем что возможных позиций только 2 для каждого коня.

Осталось перебрать в каких из етих позиций перекрываются все остальные клетки. smile




--------------------
PM MAIL WWW   Вверх
proger
Дата 27.2.2006, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 400
Регистрация: 10.10.2004

Репутация: нет
Всего: 1



ДобренькийПапаша,
А у тебя в углах не битые клетки остались и у тебя не видно где кони стоят! МОжешь помочь исправить это?
PM MAIL   Вверх
proger
Дата 27.2.2006, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 400
Регистрация: 10.10.2004

Репутация: нет
Всего: 1



mes,
Нарисуй визуально если тебе не трудно!
PM MAIL   Вверх
esperant0
Дата 27.2.2006, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 714
Регистрация: 20.5.2005

Репутация: 4
Всего: 14



задача не решаема это не сложно доказать.


для того чтобы закрыть четыре четверки, состоящии из четырех угловых клеток нужно 16 коней


--------------------
 
 Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer 

Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором  а затем стерто и которое он - пользователь не мог видеть. 
PM MAIL   Вверх
Dov
Дата 27.2.2006, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: нет
Всего: 88



Цитата(esperant0 @ 27.2.2006, 21:24 Найти цитируемый пост)
задача не решаема это не сложно доказать.


для того чтобы закрыть четыре четверки, состоящии из четырех угловых клеток нужно 16 коней

esperant0, это ты сказал не подумавши. Погорячился.



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
esperant0
Дата 28.2.2006, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 714
Регистрация: 20.5.2005

Репутация: 4
Всего: 14



Цитата(Dov @ 27.2.2006, 23:42)
Цитата(esperant0 @  27.2.2006,  21:24 Найти цитируемый пост)
задача не решаема это не сложно доказать.


для того чтобы закрыть четыре четверки, состоящии из четырех угловых клеток нужно 16 коней

esperant0, это ты сказал не подумавши. Погорячился.

нужно 12 коней, но как их не ставь остануться свободные клетки. среди не угловых


--------------------
 
 Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer 

Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором  а затем стерто и которое он - пользователь не мог видеть. 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1123 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.