Форум программистов, компьютерный форум CyberForum.ru

Слон бьет врагов ??? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.82
SergProgC++
Эксперт GPSS
 Аватар для SergProgC++
314 / 316 / 59
Регистрация: 02.07.2010
Сообщений: 1,316
12.01.2011, 21:36     Слон бьет врагов ??? #1
Приветствую, всех! Кто то скажет опять эти шахматы, сам спекся когда получил задание. Но дорогие форумчани помогите с задание. Не понимаю даже с чего начать. Набрасал только начало,а дальше в ступоре
Задание следующее:
Найти возможные способы для удара слоном максимального количества вражеских фигур за N проходов исходя из определенного задаваемого поло-жения вражеских фигур, не изменяющих своего положения. Определить кратчайшие.
Вот что уже сделано:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <iostream.h>
#include <iomanip.h>
#include <conio.h>
#include <stdlib.h>
const n=9; // razmernost massiva
void Matr(char M[][n]);
void main()
 
{
 int s1,s2,e,E,i,j,Pause;
 char A[n][n];
 clrscr();
 
 /////////enter massiv
 for(i=1; i<n; i++)
  { for(j=1; j<n; j++)
 
    if ((i+j)%2==0)
    A[i][j]='\xDB'; else
    A[i][j]='\xB1';
  }
  Matr(A);
 
  //////// enter SLON//////////
 
  i=j=n;  // dlia vhoda v cikl
  while (i>8 || j>8 || i<1 || j<1)
  {
    cout<<"\nVvedite koordinaty Slona:\n";
    cout<<"Nomer stroki (1..8)="; cin>>i;
    cout<<"Nomer stolbca(1..8)="; cin>>j; cout<<"\n";
     if (i>8 || j>8 || i<1 || j<1)
     { cout<<"ERROR! Nedopustimoe polojenie!\n"; }
  }
 
   A[i][j]='\x06';
  //   s1=i;
  //   s2=j;
 
  //   for(i=1; i<n; i++)
  //   { for(j=1; j<n; j++)
 
  //     if (s1+s2==i+j && A[i][j]!='\x06')
  //     {A[i][j]='/';}
  //   }
  //    for(i=1; i<n; i++)
  //    { for(j=1; j<n; j++)
 
  //    if(s1-s2==i-j && A[i][j]!='\x06')
  //    {A[i][j]='\x5c';}
  //   }
 
  Matr(A);
 
  ////////// enter enemies/////////
 
 E=6; // dlia vhoda v cikl
 while (E>5 || E<1)
 {
 cout<<"\nVvedite kolichestvo Vragov (1..5):"; cin>>E;
 if (E>5 || E<1)
   { cout<<"ERROR! Nedopustimoe chislo vragov!\n"; }
 }
 for(e=1; e<=E; e++)
 {
 i=j=n;  // dlia vhoda v cikl
  while (i>8 || j>8 || i<1 || j<1 || A[i][j]=='\x06'|| A[i][j]=='\x78')
  {
  cout<<"\nVvedite koordinaty Vraga "<<e<<":\n";
  cout<<"Nomer stroki (1..8)="; cin>>i;
  cout<<"Nomer stolbca(1..8)="; cin>>j; cout<<"\n";
   if (i>8 || j>8 || i<1 || j<1 || A[i][j]=='\x06'|| A[i][j]=='\x78')
    { cout<<"ERROR! Nedopustimoe polojenie!\n"; }
  }
   A[i][j]='\x78';
 }
 Matr(A);
 
 cin>>Pause;
}  ////////////THE END/////////////////
 
 
 //Function vivod massiva
 void Matr(char M[][n])
 {
 int i,j;
 cout<<"    abcdefgh\n";
 for (i=1; i<n; i++)
  { cout<<"  "<<i<<" ";
  for (j=1; j<n; j++)
   {
     cout<<setw(1)<<M[i][j];
   } cout<<" "<<i;
   cout<<endl;
   }
  cout<<"    abcdefgh\n";
  }
Буду благодарен за любую помощь!!! ОООчень нужно.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2011, 21:36     Слон бьет врагов ???
Посмотрите здесь:

C++ Бьет ли карта k1 карту k2
Мухи и слон C++
Слон C++
C++ Бьет ли конь пешку?
C++ Шахматы: Может ли слон побить слона?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.01.2011, 15:38     Слон бьет врагов ??? #21
Цитата Сообщение от SergProgC++ Посмотреть сообщение
я думаю можно доверять человеку с репутацией 1236
SergProgC++, На самом деле репутация здесь ни при чем.
Ладно, теперь о задаче.
Я предлагаю сделать эту задачу так (с помощью рекурсии): из позиции в которой находится слон, перебираем все варианты, когда за один или два хода можно убить какую-либо вражескую фигуру. Записываем эти ходы и переносим слона на то место и снова вызываем рек. функцию.
Что бы реализовать этот вариант, мне осталось узнать только:
- что делаем если введены координаты вражеской фигуры, которую мы никогда не сможем убить нашим слоном?
- в каком виде делать вывод на экран? просто вывести координаты перемещения слона? Или показывать состояние доски с фигурами после каждого хода слона?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
knofl
 Аватар для knofl
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
15.01.2011, 16:09     Слон бьет врагов ??? #22
valeriikozlov, Слушай такая функция, тока её чуть модифицировать есть в том исходнике, что я скинул+вывод на экран реализован, можно безпроблем это использовать, тем более что всё хороше закомментировано.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.01.2011, 16:16     Слон бьет врагов ??? #23
knofl, Сможете реализовать? Код Вам родной, по идее не много придется потрудится. По мне лучше написать с нуля, чем разбираться в чужом коде (даже при наличии хороших комментариев).
knofl
 Аватар для knofl
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
15.01.2011, 21:50     Слон бьет врагов ??? #24
valeriikozlov, Попробую -нужно размять пальцы, а то текущий проект застрял и только и делаю что в инете сижу=( Разбирусь сейчас с домашними делами и напишу, хотя бы что-нить похожее, рабочее.

Добавлено через 5 часов 7 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#define INFINITY 10000
 
int AlphaBeta(bool color, int depth, int alfa, int beta)
{
    if(depth==0) return(Evaluate(color)); /*Если глубина равна нулю-оценка позиции*/
    int score=-INFINITY; //инициализация - оценка хода равна -10000 
    Move* move=GenMove(color); //генерация всех ходов для данного цвета
    //Move *temp=move;
    //move=move->next;
    //delete temp; //удаление ненужного - инициализационного хода
    while(move) //пока есть ход
    {
        MakeMove(move, color); //сделать ход
        move->w=-AlphaBeta(!color, depth-1, -beta, -alfa); /*вызов alpha-beta для данного хода*/
        UnMakeMove(move, color); //отмена хода
        if(move->w>score) score=move->w; /*если оценка больше score, то score равен оценке*/
        if(alfa<score) alfa=score; /*если score больше alpha - alpha равна score*/
        if(alfa>=beta) //если alph больше либо равна beta
        {
            DeleteMove(move); //удаляем все оставшиеся ходы
            return alfa; //возвращаем alpha
        }
        Move *temp=move; 
        move=move->next;
        delete temp; //удаляем текущий ход
        temp=NULL;
    }
    return(score); //возвращаем лучшую оценку
}
Вот эта рекурсивная функция, о которой мы говорили. Остаётся переделать GenMove, MakeMove и UnMakeMove
SergProgC++
Эксперт GPSS
 Аватар для SergProgC++
314 / 316 / 59
Регистрация: 02.07.2010
Сообщений: 1,316
16.01.2011, 19:11  [ТС]     Слон бьет врагов ??? #25
не догоняю я этот код
knofl
 Аватар для knofl
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
16.01.2011, 19:55     Слон бьет врагов ??? #26
Тут есть пара ошибок. Ты рассмотри всё по шагам. Прочитать раз 10. Построй блок-схему, потрудись=) Поймёшь.
SergProgC++
Эксперт GPSS
 Аватар для SergProgC++
314 / 316 / 59
Регистрация: 02.07.2010
Сообщений: 1,316
16.01.2011, 20:04  [ТС]     Слон бьет врагов ??? #27
Легко сказать когда знаешь о чем говоришь!!!
knofl
 Аватар для knofl
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
16.01.2011, 23:46     Слон бьет врагов ??? #28
Браток, а ты не узнаешь о чём я говорю, пока сам не окунёшься, почитай книгу - тот раздел где написано про альфа-бета отсечение.
knofl
 Аватар для knofl
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
19.01.2011, 17:42     Слон бьет врагов ??? #29
Ну как продвижение?
SergProgC++
Эксперт GPSS
 Аватар для SergProgC++
314 / 316 / 59
Регистрация: 02.07.2010
Сообщений: 1,316
19.01.2011, 19:12  [ТС]     Слон бьет врагов ??? #30
Цитата Сообщение от knofl Посмотреть сообщение
Ну как продвижение?
Книжки читаю :-(
knofl
 Аватар для knofl
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
19.01.2011, 22:37     Слон бьет врагов ??? #31
SergProgC++, Давай, давай - это полезно.
SergProgC++
Эксперт GPSS
 Аватар для SergProgC++
314 / 316 / 59
Регистрация: 02.07.2010
Сообщений: 1,316
24.01.2011, 20:38  [ТС]     Слон бьет врагов ??? #32
помогите доделать ну не как не догоняю!!!
knofl
 Аватар для knofl
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
02.02.2011, 13:56     Слон бьет врагов ??? #33
SergProgC++, Ну дава, пиши что есть, подумаем. Главное ты понял, что для того чтобы всё заработало нужно последовательно сгенерить ходы, оценить каждый, выбрать один, сделать и так пока не съедим все фигуры, которые можем съесть.
SergProgC++
Эксперт GPSS
 Аватар для SergProgC++
314 / 316 / 59
Регистрация: 02.07.2010
Сообщений: 1,316
02.02.2011, 15:07  [ТС]     Слон бьет врагов ??? #34
Мне уже так все поставили но все равно спасибо за помощь
knofl
 Аватар для knofl
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
02.02.2011, 16:24     Слон бьет врагов ??? #35
Ну и слава Богу=)
SergProgC++
Эксперт GPSS
 Аватар для SergProgC++
314 / 316 / 59
Регистрация: 02.07.2010
Сообщений: 1,316
02.02.2011, 18:54  [ТС]     Слон бьет врагов ??? #36
Если есть желание можешь реализовать!!! А то тема открытая остаеться и мне будет интересно глянуть как это должно было выглядеть
almazsr
232 / 169 / 7
Регистрация: 13.11.2010
Сообщений: 425
02.02.2011, 19:53     Слон бьет врагов ??? #37
knofl, а у меня комп не ходит(
knofl
 Аватар для knofl
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
03.02.2011, 10:47     Слон бьет врагов ??? #38
TO ALL, В этом семе я новую версию шахмат фигачу, поэтому можно будет сделать реализацию в виде мода для шахмат, но это позже.

Добавлено через 3 минуты
almazsr, Странно всё это=( Ну ничего, ждите конца весны=) Там уже явно будет рабочий и хорошо оптимизированный код.
SergProgC++
Эксперт GPSS
 Аватар для SergProgC++
314 / 316 / 59
Регистрация: 02.07.2010
Сообщений: 1,316
04.02.2011, 19:40  [ТС]     Слон бьет врагов ??? #39
буду ждать с нетерпением хоть глазком бы глянуть
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2012, 17:47     Слон бьет врагов ???
Еще ссылки по теме:

Требуется определить, бьет ли конь C++
Шахматы. Каждый ферзь бьет ровного одного ферзя C++
На шахматной доске отметить все клетки, которые бьет слон C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Chpoks
Сообщений: n/a
23.06.2012, 17:47     Слон бьет врагов ??? #40
Допелите пожауйста код до конца, очень уж нужно.
Yandex
Объявления
23.06.2012, 17:47     Слон бьет врагов ???
Ответ Создать тему
Опции темы

Текущее время: 16:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru