Поиск:

Ответ в темуСоздание новой темы Создание опроса
> алгоритм проверки шахматного хода когда доска, представлена в виде графа 
:(
    Опции темы
integral
Дата 19.2.2009, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.7.2006
Где: Dnipropetrovs' ;k, Ukraine

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



Добрый день,
столкнулся с такой задачей: есть шахматная доска, которая представляется в виде графа (клетка - узел графа). т.е. получается узел имеет от 3 до 8 связей; шахматная фигура делает ход, известна начальная и и конечная клетка.  Как можно определить, может так походить фигура или нет. Например, давайте рассмотрим случай с ферземsmile  smile 
заранее спасибо

UPD кроме класических шахмат, также хотелось бы иметь общее хранилище для Гексагональных шахмат и Шахмат на круглых досках

Это сообщение отредактировал(а) integral - 19.2.2009, 18:55


--------------------
import my.opinion.*;
жж
PM ICQ   Вверх
Akina
Дата 19.2.2009, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(integral @  19.2.2009,  17:19 Найти цитируемый пост)
есть шахматная доска, которая представляется в виде графа (клетка - узел графа). 

Что за бред?




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

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.7.2006
Где: Dnipropetrovs' ;k, Ukraine

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



Цитата

Что за бред?

а что не нравится?
Akina, попрошу аргументировать ваше заявление, а еще лучше - предложить замену такому вариантуsmile

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

Это сообщение отредактировал(а) integral - 19.2.2009, 17:45


--------------------
import my.opinion.*;
жж
PM ICQ   Вверх
Akina
Дата 19.2.2009, 18:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(integral @  19.2.2009,  18:44 Найти цитируемый пост)
а что не нравится?
Akina, попрошу аргументировать ваше заявление

Очень хочется сказать что-то нехорошее... но ладно, ограничусь аргументацией.

Итак, это граф. В котором рёбра соединяют соседствующие клетки. Соответственно единственная информация, добываемая из графа - это соседствуют клетки или нет, ну и при определённом просчёте - какова минимальная длина пути от одной клетки до другой. Направление в рамки графа не втискивается. Возьмём одну из фигур - коня. Он ходит на 2 клетки в каком-либо направлении, затем на одну - в перпендикулярном направлении. Однако у нас нет сведений о направлениях - то есть в рамках графа мы не можем построить ход коня. То есть граф для хранения шахматной доски неприменим.

Цитата(integral @  19.2.2009,  18:44 Найти цитируемый пост)
предложить замену такому варианту

Велосипед изобретён задолго до вас. Двумерный массив называется.


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

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.7.2006
Где: Dnipropetrovs' ;k, Ukraine

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



Цитата

Велосипед изобретён задолго до вас. Двумерный массив называется.

я тоже рассматривал этот вариант, но с ним как-то не вяжются Гексагональные шахматы и Шахматы на круглых досках, ну и еще кое-какие варианты есть... может можна поизощрятс над масивом, но как-то слишком изощрено

Цитата

Направление в рамки графа не втискивается

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


Это сообщение отредактировал(а) integral - 19.2.2009, 18:34


--------------------
import my.opinion.*;
жж
PM ICQ   Вверх
Akina
Дата 19.2.2009, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(integral @  19.2.2009,  19:31 Найти цитируемый пост)
с ним как-то не вяжются Гексагональные шахматы и Шахматы на круглых досках, ну и еще кое-какие варианты есть

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

Цитата(integral @  19.2.2009,  19:31 Найти цитируемый пост)
каждый ее сосед хранится как Северный, южный и т.д.

Это не втискивается в граф.


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

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.7.2006
Где: Dnipropetrovs' ;k, Ukraine

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



Цитата

Определись, какой именно тебя интересует

интересуют как-раз несколько вариантовsmile Но хотелось бы иметь единый способ описания доски, а определение возможности перехода фигуры переложить на саму фигуру

Цитата

Это не втискивается в граф

почему? например, переход по ветвям север дает прямую линию; если направления описать как перечисление enum {N = 1, NW=2, W=3}, то поворот на 90 градусов можно определить как изменение направлени на 2 ( |W-N|=2 ), на 45 на 1. но это ужастно неоптимально по скорости/памяти. что бы проверить переход ферзем из Е2 в С7 мне нужно найти Е2 и пройтись по всем возможным путям ищя клетку С7....

Это сообщение отредактировал(а) integral - 19.2.2009, 18:56


--------------------
import my.opinion.*;
жж
PM ICQ   Вверх
Akina
Дата 19.2.2009, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(integral @  19.2.2009,  19:53 Найти цитируемый пост)
хотелось бы иметь единый способ описания доски, а определение возможности перехода фигуры переложить на саму фигуру

В таком случае храни не граф, а таблицу в БД.
Соответственно структура типа исходное поле, конечное поле, тип перехода. Правда, с типом перехода надо подумать немного (ведь есть двухфигурные ходы ака рокировка).



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

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


Опытный
**


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

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



Раз уж пошли извращения, то предложу вариант определения возможности хода:
Будем хранить в качестве признака достижимости не булево значение, а набор битов.
например бит 0 будет сообщать о возможности сходить пешкой, бит 1 - ладьей, бит 2 - слоном, 3 - конем, для ферзя - чтобы обязательно отсутствовал бит 3
тогда, например, для хода из а1 в а8 будет храниться 0b0010 (можно скакнуть только слоном), для а1 в с2 - 0b1000 (можно только конем), а вариант а1-а2 есть 0b0011 (или пешка, или ладья)

P.S. Извиняюсь за слон-ладью, все время путаю которая фигура какая есть :-[. Здесь считаю что ладья ходит по вертикали-горизонтали, а слон по диагоналям
PM MAIL   Вверх
Akina
Дата 20.2.2009, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Silent @  20.2.2009,  00:48 Найти цитируемый пост)
 для хода из а1 в а8 будет храниться 0b0010 (можно скакнуть только слоном), 

ферзь, ладья

Цитата(Silent @  20.2.2009,  00:48 Найти цитируемый пост)
а1-а2 есть 0b0011 (или пешка, или ладья)

король, ферзь, ладья

Добавлено через 1 минуту и 52 секунды
Но формально возможный ход может быть реально невозможным - ладья не может пойти с а1 на а3, если на а2 стоИт фигура... для учёта этого потребуется четырёхмерная матрица, а это перебор.


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

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.7.2006
Где: Dnipropetrovs' ;k, Ukraine

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



Цитата

В таком случае храни не граф, а таблицу в БД.

это понятно, но в памяти то ведь эту структуру надо как-то отображать


Цитата

Будем хранить в качестве признака достижимости не булево значение, а набор битов.

это вариант, хранить с каждым направлением возможность перехода по нем фигуры с этой клетки, тогда для проверки возможности достижения конечной клетки перебирать клетки на этом пути и проверять их на отсутствие в них препядствий... как-то так


--------------------
import my.opinion.*;
жж
PM ICQ   Вверх
Earnest
Дата 20.2.2009, 18:50 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Цитата(integral @  20.2.2009,  18:00 Найти цитируемый пост)
это понятно, но в памяти то ведь эту структуру надо как-то отображать

Это двадцать пятый вопрос - как хранить в памяти. Если ты хочешь иметь обобщенное описание доски - разработай абстрактный интерфейс, который для каждого типа будет реализовываться по своему. Для обычной доски - матрица самое то. Для гексогональной - извращайся по другому. Главное, чтобы интерфейс был ясным. Типа "Хто в этой клетке сидит?", "Хто у нас сосед по грани X", "Может данная фигура совершить ход из клетки А в B?". Главное, чтобы алгоритм был отдельно, а мухи, т.е. имплементация - отдельно.

Добавлено через 1 минуту и 4 секунды
Хочешь использовать граф - используй, но интерфейс должен формулироваться на языке задачи, а не имплементации.


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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 30.1.2007
Где: Lithuania::Kaunas

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



Кстати, 6-ти гранная доска тоже очень хорошо описывается матрицей.
Тока там ось Y повернута не на 90 градусов относительно Х, а на 120.

Что то похожее на это:
user posted image


Это сообщение отредактировал(а) Lomir - 20.2.2009, 23:47
PM MAIL ICQ Skype   Вверх
aram90
Дата 27.2.2009, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Bug hunter



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.12.2008
Где: Yerevan, Armenia

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



Что ж, предложу свой вариант, можни хранить пары чисел для каждой фигуры, (dx,dy), например для коня
(-1,-2)
(1,-2)
(2,-1)
(2,1)
(1,2)
(-1,2)
(-2,1)
(-2,-1)
Это значит что если конь стоит в клетке (x,y), то она может ходить в клетку (x+dx,y+dy), если она, конечно, существует.
Только надо хранить еще флажок для каждой фигуры - может ли она сделать несколько шагов, или только одну. Если может делать
несколько шагов, значит она может перемещаться в клетку (x+dx*k,y+dy*k) для фиксированной (dx,dy), но еще надо проверять путь
на наличие других фигуров.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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