Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
Sometimes
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 1
#1

Снова задача про ход коня - C++

27.09.2012, 12:55. Просмотров 2455. Ответов 0
Метки нет (Все метки)

Здравствуйте. Задача: рекурсивно обойти шахматную доску конем (программа просто выводит один вариант решения, без дополнительных наворотов, первый ход делается случайным образом, после каждого хода экран перерисовывается). Подскажите, пожалуйста, как нужно исправить код, чтобы функция находила решение. Сейчас поиск происходит бесконечно.
Знаю, что задача поднималась уже много раз и в сети полно решений - я пересмотрел многие, и все программы усложнены пока неизвестными мне функциями. Я выбрал одно решение и попытался его переделать, ведь единственный способ понять рекурсию - это понять рекурсию) Спасибо.
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
#include <iostream>
#include <stdlib.h>
#include <math.h>
#include <time.h>
 
using namespace std;
const int n=8;      //размер поля
int pole [n][n]={0};
int nstep=1;             //счетчик шагов
static  int xy[16] = { 1, 2, 2, 1, 2, -1, 1, -2, -1, -2, -2, -1, -2, 1, -1, 2 }; //возможные ходы
 
void show (int n,int nstep)  //функция выводит на экран
{
    system("cls");   //очистка экрана перед новом выводом на экран
    for (int i=0;i<n;++i)
    {
        for (int j=0;j<n;++j)
        {
            if (!pole[i][j])
                cout<<"*  ";
                
            else if(pole[i][j]%10>0) cout<<pole[i][j]<<"  ";
                else  cout<<pole[i][j]<<" ";
        }
        cout<<'\n';
    }
    cout<<nstep;cout<<'\n';
}
 
int set(int startI,int startJ)   
{   
    int x1, y1, q;
    for (q = 0; q < 16; q += 2) // перебирает возможные ходы конем
    {
        x1=startI + xy[q];
        y1 = startJ + xy[q + 1];
        if (x1 >= 0 && x1 <= (n-1) && y1 >= 0 && y1 <= (n-1) && pole[x1][y1] == 0)  
            
        {
            nstep++;
            pole[x1][y1] = nstep;
            if (nstep==n*n) return 1;
            show(n,nstep);
            if (set(x1,y1)) return 1;
            pole[x1][y1] = 0;
            nstep--;
        }
        
    }
    
    return 0;
    
}
void main(){
    srand((int)time(NULL));
    int startI=rand()%n;
    int startJ=rand()%n;
    pole[startI][startJ]=1;  //первый ход
    show(n,nstep);
    set(startI,startJ);
    
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2012, 12:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Снова задача про ход коня (C++):

Ход коня - C++
Здравствуйте, уважаемые форумчане!!! у меня возникла проблема с задачей про коня!!! Дело в том что первоначальные значения координат...

Дейтел ход коня(выход за массив) - C++
проблема в том что конь выходит за пределы массива. Проблема в функции horsemove(); что не так ? почему он это делает , вроде бы...

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

Задачка про Коня и Короля - C++
Задана шахматная доска, на которой расставлены черные и белые фигуры, в том числе белый король и черный конь. Определить, может ли белый...

Зача про шахматного коня (решить, используя массив) - C++
Помогите пожалуйста решить задачу, на через массив: На шахматной доске NxN в клетке (x1,y1) стоит голодный шахматный конь. Он хочет...

Задача - Путешествие коня - C++
Выдает необработанное исключение #include &lt;iostream&gt; using std::cout; using std::endl; #include &lt;ctime&gt; using std::time; ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2012, 12:55
Привет! Вот еще темы с ответами:

Задача о ходе коня. Опять - C++
Доброе время суток. Мой пост уже второй по этой программе. В прошлый раз меня просили ее сделать более понятной. Ну старался как мог. И...

Снова про переполнение массива - C++
#include &lt;iostream&gt; using namespace std; int main () { char ar; cin &gt;&gt; ar; cout &lt;&lt; ar; return 0; ...

Задача Ход конем - 2. - C++
день добрый. задача: http://informatics.mccme.ru/moodle/mod/statements/view3.php?id=656&amp;chapterid=2962#1 как видите, задача на тему...

Указатель и снова про русский язык в консоли - C++
Здравствуйте.Указатель не возвращает русские буквы. Пишу что то на русском, возвращает набор символов, на анг все норм. Как можно...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.