6 / 6 / 1
Регистрация: 18.07.2013
Сообщений: 176
1

Передвижение коня по доске и сбор букв

10.07.2016, 12:07. Показов 746. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!

Не могу разобраться, в чём проблема =(

Нужно решить задачу: есть шахматная доска. На ней, в каждой клетке, расположены буквы. По доске "ходит" конь (буквой "г", соответственно), и "собирает" фигуры. Нужно собрать таким образом 6 букв (первая "Э" уже задана).

К сожалению, кроме всякой ерунды, ничего не выдаёт =( Буду рад помощи.

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
#include <iostream>
#include <conio.h>
 
int hod(int, int, int, char[6]);
 
char desk[8][8] = { { 'и', 'р', 'м', 'о', 'и', 'в', 'о', 'о' },
                    { 'а', 'э', 'ч', 'а', 'д', 'в', 'о', 'ч' },
                    { 'о', 'м', 'о', 'и', 'д', 'м', 'а', 'л' },
                    { 'ы', 'с', 'т', 'и', 'и', 'т', 'о', 'е' },
                    { 'о', 'д', 'м', 'ы', 'о', 'э', 'п', 'м' },
                    { 'и', 'т', 'е', 'ф', 'с', 'м', 'б', 'п' },
                    { 'н', 'т', 'у', 'г', 'м', 'и', 'и', 'т' },
                    { 'с', 'л', 'ы', 'м', 'г', 'а', 'и', 'р' }
                    };
 
int main(){
    setlocale(0, "");
 
    hod(1, 1, 5, "э");
    _getch();
}
 
int hod(int _coord_x, int _coord_y, int _count_hod, char _str[6]){
    if (_count_hod == 0){
        std::cout << _str << " Конец" << std::endl;
        return 0;
    }
 
    if (_coord_x - 2 >= 0 && _coord_y + 1 <= 7){    // +
        hod(_coord_x - 2, _coord_y + 1, _count_hod - 1, _str + desk[_coord_x - 2][_coord_y + 1]);
    }
    if (_coord_x - 1 >= 0 && _coord_y + 2 <= 7){    // +
        hod(_coord_x - 1, _coord_y + 2, _count_hod - 1, _str + desk[_coord_x - 1][_coord_y + 2]);
    }
    if (_coord_x + 1 <= 7 && _coord_y + 2 <= 7){    // +
        hod(_coord_x + 1, _coord_y + 2, _count_hod - 1, _str + desk[_coord_x + 1][_coord_y + 2]);
    }
    if (_coord_x + 2 <= 7 && _coord_y + 1 <= 7){    // +
        hod(_coord_x + 2, _coord_y + 1, _count_hod - 1, _str + desk[_coord_x + 2][_coord_y + 1]);
    }
    if (_coord_x + 2 <= 7 && _coord_y - 1 >= 0){    // +
        hod(_coord_x + 2, _coord_y - 1, _count_hod - 1, _str + desk[_coord_x + 2][_coord_y - 1]);
    }
    if (_coord_x + 1 <= 7 && _coord_y - 2 >= 0){    // +
        hod(_coord_x + 1, _coord_y - 2, _count_hod - 1, _str + desk[_coord_x + 1][_coord_y - 2]);
    }
    if (_coord_x - 1 >= 0 && _coord_y - 2 >= 0){    // +
        hod(_coord_x - 1, _coord_y - 2, _count_hod - 1, _str + desk[_coord_x - 1][_coord_y - 2]);
    }
    if (_coord_x - 2 >= 0 && _coord_y - 1 >= 0){    // +
        hod(_coord_x - 2, _coord_y - 1, _count_hod - 1, _str + desk[_coord_x - 2][_coord_y - 1]);
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2016, 12:07
Ответы с готовыми решениями:

Реализовать передвижение шахматного коня по доске
помогить пожалуйста,как передвигать коня на доске? конь может только передвигаться в низ и налево

Ход коня на шахматной доске
Я вообще в этом языке плохо понимаю, поэтому огромная просьба помогите написать программу для...

Движение коня по всей шахматной доске
Помогите написать программу пожалуйста. Такое задание: Написать программу,демонстрирующую решение...

Ход коня по шахматной доске случайным образом
Используйте генерацию случайного числа для предоставления коню возможности ходить по шахматной...

2
76 / 50 / 26
Регистрация: 22.02.2015
Сообщений: 306
11.07.2016, 01:25 2
Цитата Сообщение от Andeangl Посмотреть сообщение
кроме всякой ерунды
не удивительно, конь ходит один , а рекурсией получается , что у нас коней очень много.
+ то что вы делаете с char[6] не допустимо.

На 4 и 23 строчке меняем char на std::string и инклудим <string>.
C++
1
2
3
//Example
#include <string>
std::string _str
0
1 / 1 / 3
Регистрация: 06.07.2016
Сообщений: 13
17.07.2016, 17:07 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
#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
 
 
char desk[8][8] = { { 'и', 'р', 'м', 'о', 'и', 'в', 'о', 'о' },
                    { 'а', 'э', 'ч', 'а', 'д', 'в', 'о', 'ч' },
                    { 'о', 'м', 'о', 'и', 'д', 'м', 'а', 'л' },
                    { 'ы', 'с', 'т', 'и', 'и', 'т', 'о', 'е' },
                    { 'о', 'д', 'м', 'ы', 'о', 'э', 'п', 'м' },
                    { 'и', 'т', 'е', 'ф', 'с', 'м', 'б', 'п' },
                    { 'н', 'т', 'у', 'г', 'м', 'y', 'и', 'т' },
                    { 'с', 'л', 'ы', 'м', 'г', 'а', 'и', 'р' },
                    
};
int countd = 0;
string r;
int i = 0;
int dx[8] = {1,-2,-2,-1,-1,2,2,1};
int dy[8] = {2,-1,1,2,-2,1,-1,-2};
 
void DFS(int x,int y){
    
    if (x>= 0 && y <= 7){
    
        if (desk[y][x] != '1'){
        r += desk[y][x];
        countd += 1;
        desk[y][x] = '1';
        }else {return;}
    }else {
        return;
    }
    if(countd == 6){
    
           cout << r;
    }
    for (int i = 0; i < 8 && countd != 6;i++){
        DFS(x+dx[i],y+dy[i]);
    }
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale (LC_CTYPE, "Rus");
    DFS(1,1);
    system("pause");
    return 0;
}
0
17.07.2016, 17:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.07.2016, 17:07
Помогаю со студенческими работами здесь

Построить алгоритм ходов коня по шахматной доске с помощью рекурсии
Здравствуйте. Суть задачи: построить алгоритм ходов коня по шахматной доске с помощью рекурсии....

Отметьте положение коня на доске и все клетки, которые бьет конь
На шахматной доске стоит конь. Отметьте положение коня на доске и все клетки, которые бьет конь....

Поиск последовательности перемещений коня на шахматной доске из одной клетки в другую
Реализовать алгоритм решения задачи о поиске последовательности перемещений коня на шахматной доске...

Проверить, есть ли в массиве записи, сходные с записью ходов коня по шахматной доске
Заполните случайным образом массив (100 элементов) поочередно буквами латинского алфавита от A до H...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru