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

Определить поля, на которые может пройти белый конь - C++

Восстановить пароль Регистрация
 
TanuFFka
1 / 1 / 0
Регистрация: 25.12.2010
Сообщений: 15
25.12.2010, 18:40     Определить поля, на которые может пройти белый конь #1
Даны натуральные числа a,b,c,d, каждое из которых не превосходит восьми. Определить поля(отметить их символом +), на кот-е может пройти белый конь, расположенный на поле(a,b), не попав при этом под удар черного ферзя, находящегося на поле(c,d)
Как реализовать ход коня в символьном массиве.???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2010, 18:40     Определить поля, на которые может пройти белый конь
Посмотрите здесь:

Определить поля, на которые может пойти белая ладья C++
Список клеток, которые конь может достичь за один ход C++
Вывести все возможные поля, на которые может попасть шахматный конь за один прыжок из данной клетки C++
C++ На доске стоят два ферзя. Указать поля, на которые может пойти белый ферзь, чтобы не попасть под удар черного
C++ Может ли шахматный конь за один ход попасть из одного поля в другое?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kill100
 Аватар для Kill100
356 / 245 / 32
Регистрация: 11.12.2010
Сообщений: 1,060
Завершенные тесты: 1
25.12.2010, 19:59     Определить поля, на которые может пройти белый конь #2
Вот функции
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
//------------------------------------------------------------------------------- 
//Функция вывода матрици на экран. 
//------------------------------------------------------------------------------- 
void print(char**a){ 
      for (int i=0; i<g; i++) 
      { 
          for (int j=0; j<g; j++) 
          cout<<a[i][j]<<" "; 
          cout<<"\n";}; 
} 
 
//------------------------------------------------------------------------------- 
//Функция создания символьного массива и забития его точками. 
//------------------------------------------------------------------------------- 
char** enter(){ 
       char **a=new char*[g]; 
       for (int i=0; i<g;i++) 
       { 
           a[i]=new char [g]; 
           }; 
 
for (int i=0; i<8; i++){ 
          for (int j=0; j<8; j++) 
              a[i][j]='.'; 
        }; 
return a; 
} 
//------------------------------------------------------------------------------- 
//Создадим функцию для координат чёрного ферзя и его перемещений. 
//------------------------------------------------------------------------------- 
void C_Ferz (char**mass, int a, int b){ 
    a=a-1; 
    b=8-b; 
 
    for (int i=0;i<g;i++) 
        for (int j=0;j<g;j++){ 
            //Здесь применяем свойство диаганалей. 
            if ((i==a)||(j==b)) mass[i][j]='+'; 
            if ((i+j==a+b)) mass[i][j]='+'; 
            if ((i-j==a-b)) mass[i][j]='+'; 
        }; 
}
А вот как сделать коня Хз...
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
25.12.2010, 20:34     Определить поля, на которые может пройти белый конь #3
только для первого хода коня
для следующих надо?
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
#include <iostream>
using namespace std;
//ходы коня
const int dx[] = {-2, -2, 2, 2, -1, 1, -1, 1};
const int dy[] = {-1, 1, -1, 1, 2, -2, -2, 2};
 
int main()
{
   int zapol = 46; //заполнитель доски
   char doska[8][8];
   for (int i = 0; i < 8; i++)
      for (int j = 0; j < 8; j++)
            doska[i][j] = zapol;
 
   int a, b, c, d;
   cout << "Введите координаты коня на доске, а потом координаты ферзя:\n";
   cin >> a >> b >> c >> d;
   
//ставим на поле ферзь и помечаем те поля, которые под ее ударом
////////////////////////////////////////////////////////////////////////////////
   doska[c-1][d-1] = 'Ф';
   
   for (int s = 0; s < 8; s++)
      if (doska[s][d-1] != 'Ф') doska[s][d-1] = '-';
   
   for (int s = 0; s < 8; s++)
      if (doska[c-1][s] != 'Ф') doska[c-1][s] = '-';
 
   for (int i = c-1, j = d-1; i < 8 && j <8; i++, j++)
      if (doska[i][j] != 'Ф') doska[i][j] = '-';
      
   for (int i = c-1, j = d-1; i >= 0 && j >= 0; i--, j--)
      if (doska[i][j] != 'Ф') doska[i][j] = '-';
   
   for (int i = c-1, j = d-1; i >= 0 && j < 8; i--, j++)
      if (doska[i][j] != 'Ф') doska[i][j] = '-';
   
   for (int i = c-1, j = d-1; i < 8 && j >= 0; i++, j--)
      if (doska[i][j] != 'Ф') doska[i][j] = '-';
////////////////////////////////////////////////////////////////////////////////
//Перебираем поля, на которые может пойти конь
   for (int i = 0; i < 8; i++)
   {
      int x = a-1 + dx[i];
      int y = b-1 + dy[i];
      if (x >= 0 && x < 8 && y >= 0 && y < 8)
            if (doska[x][y] != '-') doska[x][y] = '+';
   }
////////////////////////////////////////////////////////////////////////////////
//Убираем с поля дополнительные "минусы"
   for (int i = 0; i < 8; i++)
   {
      for (int j = 0; j < 8; j++)
            if (doska[i][j] == '-') doska[i][j] = zapol;
   }
////////////////////////////////////////////////////////////////////////////////
//Выводим результат
   doska[a-1][b-1] = 'K';
   for (int i = 0; i < 8; i++)
   {
      for (int j = 0; j < 8; j++)
            cout << doska[i][j];
      cout << endl;
   }
   return 0;
}
клетки доски не чередуются, но могу сделать
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
25.12.2010, 20:39     Определить поля, на которые может пройти белый конь #4
Алгоритм таков:
"ставив" на поле ферзя и отмечаем клетки, которые находятся под ударомНазвание: 001.jpg
Просмотров: 101

Размер: 9.7 Кб
перебираем все возможные ходы коня и если на клетке нет минуса, то ставим плюс Название: 002.jpg
Просмотров: 101

Размер: 9.5 Кб
убираем "промежуточные минусы" и выводим доску Определить поля, на которые может пройти белый конь
"заполнитель" доски - точки. чтобы как на рисунку -
C++
1
zapol = 4
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
25.12.2010, 20:41     Определить поля, на которые может пройти белый конь #5
это не столь важно, но доску надо "разворачивать"?
Kill100
 Аватар для Kill100
356 / 245 / 32
Регистрация: 11.12.2010
Сообщений: 1,060
Завершенные тесты: 1
25.12.2010, 22:04     Определить поля, на которые может пройти белый конь #6
Mayonez,
Но ведь конь ходит по Г образной траектории.
Вот лично я не до конца понял где как раз эта Г образная траектория рисуется.
Но как я понял ей примерно требуется такой вот вывод как тут.
[C++] Еще одна про шахматы (колоквиум) Массив 8x8 и Ферзи (у меня примерная задача на коллоквиуме была)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2010, 22:17     Определить поля, на которые может пройти белый конь
Еще ссылки по теме:

C++ Список клеток, которые конь может достичь за первый и второй ход
Определить, может ли конь за один ход перейти с одного поля на другое C++
C++ Может ли шахматный конь за один ход попасть из одного поля в другое?

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

Или воспользуйтесь поиском по форуму:
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
25.12.2010, 22:17     Определить поля, на которые может пройти белый конь #7
Цитата Сообщение от Kill100 Посмотреть сообщение
Вот лично я не до конца понял где как раз эта Г образная траектория рисуется.
C++
1
2
const int dx[] = {-2, -2, 2, 2, -1, 1, -1, 1};
const int dy[] = {-1, 1, -1, 1, 2, -2, -2, 2};
равносильно
.*.*.
*...*
..К..
*...*
.*.*.
где . - пустое поле
* - куда ходит конь
нарисуйте на листке и увидите
Yandex
Объявления
25.12.2010, 22:17     Определить поля, на которые может пройти белый конь
Ответ Создать тему
Опции темы

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