Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 10 магараджей 
:(
    Опции темы
bip
Дата 15.4.2007, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Магараджа - это фигура, которая объединяет в себе ходы коня и ферзя. 
Для доски 10*10 найти способ расстановки 10 мирных магараджей т.е. чтобы они не угрожали друг другу.
 smile 
PM MAIL ICQ   Вверх
ama_kid
Дата 15.4.2007, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



Вот тут месяц назад я помогал человеку с такой же задачей (правда она была на С++). Переводи...  smile Если сам не сможешь - поможем...  smile 


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
bip
Дата 15.4.2007, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 smile  спсибо, буду переводить  smile 
PM MAIL ICQ   Вверх
bip
Дата 15.4.2007, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

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


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



bip, хм... на это я не обратил внимания, действительно, там было 9-ть штук... Надо поизучать этот момент...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
bip
Дата 26.4.2007, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Чё-то не хочет эта прога расставлять 10 магараджей, хотя есть 4 варианта расстановки:
1 2 3 4 5 6 7 8 9 10
-------------------------
3 6 9 1 4 7 10 2 5 8
4 8 1 5 9 2 6 10 3 7
7 3 10 6 2 9 5 1 8 4
8 5 2 10 7 4 1 9 6 3
Вообще мне говорят,что эта задачка решается с помощью возвратного алгоритма.
Хелп!

 smile 
PM MAIL ICQ   Вверх
Fin
Дата 27.4.2007, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


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

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



Ну обратно код на С++, делается перебор с отсечением заведомо неправильных комбинаций

Код

// Magaradj - Queen + knight
// 26 april 2007 22:58

#include <stdio.h>

#define MAXBOARD 10

int board[MAXBOARD];

bool IsFreeBishop(int beg)
{
   int i=0;
   int up=board[beg]+beg;
   int down=board[beg]-beg;
   bool fl=true;
   while (fl && (i<beg))
   {
      if ((board[i] == up) || (board[i] == down)) fl=false;
      else 
      {
         up--;
         down++;
         i++;
      }
   }
   return fl;
}

bool IsFreeRook(int beg)
{   
   int i=0;
   bool fl=true;
   while (fl && (i<beg))
   {
      if (board[i] == board[beg]) fl=false;
      else i++;
   }
   return fl;
}

bool IsFreeKnight(int beg)
{
    int step[4][2]={{-2,-1},{-1,-2},{1,-2},{2,-1}};
    int i=0;
    bool fl=true;
    while (fl && (i<4))
    {
        if ((beg+step[i][1])>=0)
        {
            if ((board[beg]+step[i][0]) == (board[beg+step[i][1]])) fl=false;
            else i++;
        }
        else i++;

    }
   return fl;
}

bool IsFreeMagaradj(int beg)
{
   return IsFreeBishop(beg) && IsFreeRook(beg) && IsFreeKnight(beg);
}

int main()
{
    int i=0;
    int beg=0;
    board[beg]=0;
    int stat=0;
    while (beg>=0)
    {
        switch (stat)
        {
        case 0:
            if (IsFreeMagaradj(beg)) stat=1;
            else stat=2;
            break;
        case 1:
            beg++;
            if (beg==MAXBOARD) stat=3;
            else
            {
                board[beg]=0;
                stat=0;
            }
            break;
        case 2:
            board[beg]++;
            if (board[beg] == MAXBOARD) beg--;
            else stat=0;
            break;
        case 3:
            for (i=0; i<(MAXBOARD-1); i++) printf("%d, ",board[i]+1);
            printf("%d\n", board[i]+1);
            beg--;
            stat=2;
            break;
        };
    }
   return 0;
}


Результат работы
Цитата

3, 6, 9, 1, 4, 7, 10, 2, 5, 8
4, 8, 1, 5, 9, 2, 6, 10, 3, 7
7, 3, 10, 6, 2, 9, 5, 1, 8, 4
8, 5, 2, 10, 7, 4, 1, 9, 6, 3
Press any key to continue



--------------------
Пролетал мимо.
PM MAIL   Вверх
bip
Дата 27.4.2007, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



спасибо буду разбираться ), и пытаться перевести на паскаль.  smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

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

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


 




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


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

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