Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > кто придумает лучший алгоритм?


Автор: polosatij 1.12.2004, 14:45
коротко о "шахматной доске":

есть вот такая вот усечёная доска:

http://server.imp-agentur.com/polosatij/chess.gif

придумать алгоритм для хода слоном smile
как примеры, были выбраны 4 пункта smile //внимание изменения: я ещё один ход добавил

кто придумает лучший smile

Автор: redrick 1.12.2004, 15:11
хода куда ? может обхода ?
и не стоит ли переместить в Алгоритмы ?

Автор: Domestic Cat 1.12.2004, 16:37
Лучший алгоритм чего? В смысле, кратчайший путь или наименьшее число перемещений?

Автор: polosatij 1.12.2004, 18:55
Цитата(redrick @ 1.12.2004, 15:11)
хода куда ? может обхода ?


нет.. не обхода..
может ли слон походить с одного поля на другое.

Цитата(redrick @ 1.12.2004, 15:11)
и не стоит ли переместить в Алгоритмы ?


не знаю.. а такое здесь есть?


Цитата(Domestic @ 1.12.2004, 16:37)
Лучший алгоритм чего? В смысле, кратчайший путь или наименьшее число перемещений?


дело в том, что это сильно упрощеная версия моей задачи..
таких полей у меня штук 6.. если всё просматривать с помощью if, то на выходе я получу как минимум 300 строк у одного "слона"..

просто, может кто натолкнет на идею какую..

Автор: Domestic Cat 1.12.2004, 19:04
Цитата
дело в том, что это сильно упрощеная версия моей задачи..
таких полей у меня штук 6.. если всё просматривать с помощью if, то на выходе я получу как минимум 300 строк у одного "слона"..


снова нe понял. тебe нужен алгоритм ходa - как слоном ходить? иli как слоном (известно как он ходит) добраться дo определенной клетки?

Автор: polosatij 1.12.2004, 19:22
Цитата(Domestic @ 1.12.2004, 19:04)
нужен алгоритм ходa


причём, чем меньше byte, тем лучше

Автор: Domestic Cat 1.12.2004, 19:38
Цитата
чем меньше byte


это чтобы он был меньше 8 бит? smile

А алгоритмa здес' никакогo нет - берешь двумерный массив в видe твоей доски, и перемещаеш ь
слонa в 4 направлениях - если его координаты int x, int y, то будет
1. x + n, y + n
2. x - n, y + n
3. x - n, y - n
4 x + n, y - n
При этом проверяшь не выходит ли он за границы поля (массива)

Автор: polosatij 1.12.2004, 23:42
Цитата(Domestic @ 1.12.2004, 19:38)
и перемещаеш ь
слонa в 4 направлениях - если его координаты int x, int y, то будет
1. x + n, y + n
2. x - n, y + n
3. x - n, y - n
4 x + n, y - n
При этом проверяшь не выходит ли он за границы поля (массива)


нет.. так получается болеьше чем 600 строк..
ладно.. забей) я не могу полностью всего здесь рассказать, это лишь маленький неудачно спрошенный кусочек..

еееееееех..

Автор: Domestic Cat 2.12.2004, 01:52
Цитата(polosatij @ 1.12.2004, 14:42)
нет.. так получается болеьше чем 600 строк..


Почему ? smile

Автор: igon 2.12.2004, 02:58
Навскидку: так как слон ходит только по диагонали,
Организуешь 2-х мерный массив:
1-й индекс - поле по горизонтали
2-й индекс - поле по вертикали
значение элемента - 0 - занято, 1-свободно.

Пусть текущая позиция 3,3. Надо - 8,8
Код


sum = 0;
for (i=4,j=4; i<8,j<8; i++,j++)
 {sum += array[i][j]}
if sum = (8-1) - (3+1) - 1 => путь свободен, если меньше - что-то мешает

Знаки приращения у i и j определяем в зависимости от направления движения.

И, наконец, определяем, чем занято поле 8,8. Своей фигурой - ходить нельзя, чужой

- бьем, пустая - ходим.

Повторяю - это навскидку, наверняка можно оптимизировать, например, для движения по главной диагонали

вправо-вверх (как в данном случае), достаточно
Код


for (i=4; i<8; i++)
 {sum += array[i][i]}


Автор: sergejzr 4.12.2004, 00:59
Офицер всегда ходит по прямой под уклоном +-45 градусов от своей позиции.
Тебе надо всего лишь смотреть, пересекается ли та прямая с "пустым" прямоугольником smile
Что-то в этом роде..

Но при чём здесь ява?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)