Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 16.06.2021
Сообщений: 104

Обход конем

06.08.2021, 12:03. Показов 1099. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Написал программу моделирующую проход коня по шахматной доске 8*8, так чтобы фигура один раз коснулась все клеток. Не могу понять в чем ошибка вызова функции и почему нет журнала компиляции(на что-то нажал наверное, оболочка Dev c++). Можете помочь

Вот прога

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
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<math.h>
 
horse(int a, int b, int array_f[][8], int p_f)
{
    int d = rand(), h = rand(), status = 0, limit, k = 0 , c, c1, exite = 0;
// лимитирующая система  
    if((2 >= a && a <= 5) && (b >= 2 && b <= 5))
    {
        limit = 8;
    }
    
    if((a == 1 && b == 0) ||(a == 1 && b == 1) || (a == 6 && b == 0) || (a == 7 && b == 1) || (a == 0 && b == 6) || (a == 1 && b == 7) || (a == 6 && b == 7) || (a == 7 && b == 6))
        limit = 3;
    else 
        if((a >= 1 && a <= 6) && (b >= 1 && b <= 6))
    
    if((a == 0 && b == 0) || (a == 0 && b == 7) || (a == 7 && b == 0) || (a == 7 && b == 7))
        limit = 2;
    //массив координат тупиков    
    int array_t_x[limit], array_t_y[limit];
    
    for(c = 0; c < limit; c++)
    {
        array_t_x[c] = -1;
        array_t_y[c] = -1;
    }   
                
    while(status != 1)  
    {// проверка на коректность хода
        if(abs(a - d) == 2 && abs(b - h) == 1)
            if(array_f[d][h] == 0)// был ли здесь раньше или нет
            {
                ++p_f;
                array_f[d][h] = p_f;
                
                if(p_f == 64)
                    return 1;
                
                exite = hourse(d, h, array_f, p_f);
                
                if(exite == 1)
                    return 1;
            }
            else //был тупик раньше или нет
            {
                for(c = 0, c1 = 0; c1 < limit; c1++)
                {
                    if(array_t_x[c1] != d && array_t_y[c1] != h)
                    {
                        if(-1 == array_t_x[c1] && -1 == array_t_y[c1])
                        {
                            array_t_x[c1] = a;
                            array_t_y[c1] = b;
                            break;
                        }
                    }
                    else
                    {
                        k++;
                        break;
                    }
                }
                
            }
        // возврат к начальной клетке 
        if(limit == k)
            status = 1; 
            
        d = rand();
        h = rand();
    }
 
    return 0;
}
 
main()
{
    int c, array[8][8] = {0};
    array[4][4] = 1;
    srand(time(NULL));
    hourse(3, 3, array, 1);
    
    for(c = 0; c < 8; c++)
    {
        for(c1 = 0; c1 < 8; c1++)
            printf("%d ", array[c][c1]);
            
        puts("");
    }
 
}
Как вернуть журнал компиляции?
Миниатюры
Обход конем  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.08.2021, 12:03
Ответы с готовыми решениями:

Обход доски конем
Дана шахматная доска размером 8х8 и шахматный конь. Программа должна запросить у пользователя координаты клетки поля и поставить туда коня....

Обход доски шахматным конем
решал задачу &quot;Тур конем&quot;. : На шахматной доске размером n*n на поле с координатами x0,y0 находится конь - фигура , перемещающаяся по...

Обход конём шахматной доски
Приветствую всех форумчан! Нужно решить задачу: обойти конём шахматное поле размером n*n (n&lt;=8), побывав на каждой клетке не более...

2
Заблокирован
06.08.2021, 14:57
Цитата Сообщение от andrew321 Посмотреть сообщение
??? horse(int a, int b, int array_f[][8], int p_f)
...
0
1 / 1 / 0
Регистрация: 16.06.2021
Сообщений: 104
08.08.2021, 16:36  [ТС]
Всем снова привет. Я немножко подправил программу, но есть ошибка сегментации, и конь не хочет делать полный проход. Можете помочь найти ошибку.
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<math.h>
 
int horse(int a, int b, int array_f[8][8], int p_f);
 
int array[8][8] = {0};
 
int horse(int a, int b, int array_f[8][8], int p_f)
{   
    int d = rand() % 8, h = rand() % 8, limit, k = 0 , c, c1, exite = 0, k1 = 0, c_t_x[8] = {0}, c_t_y[8] = {0};
// ëèìèòèðóþùàÿ ñèñòåìà  
    if((a >= 2 && a <= 5) && (b >= 2 && b <= 5))
    {
        limit = 8;
        k1 = 1;
    }
    
    if(((a == 1 && b == 0) ||(a == 1 && b == 1) || (a == 6 && b == 0) || (a == 7 && b == 1) || (a == 0 && b == 6) || (a == 1 && b == 7) || (a == 6 && b == 7) || (a == 7 && b == 6)) && k1 != 1 )
    {
        limit = 3;
        k1 = 1;
    }
    else 
        if((a >= 1 && a <= 6) && (b >= 1 && b <= 6) && k1 != 1)
            limit = 4;
    
    if(((a == 0 && b == 0) || (a == 0 && b == 7) || (a == 7 && b == 0) || (a == 7 && b == 7)) && k1 != 1)
    {
        limit = 2;
    }
    //ìàññèâ êîîðäèíàò òóïèêîâ    
    int array_t_x[limit], array_t_y[limit];
    
    for(c = 0; c < 8; c++)
    {
        array_t_x[c] = -1;
        array_t_y[c] = -1;
    }   
                
    while(limit - 1 != k)   
    {// ïðîâåðêà íà êîðåêòíîñòü õîäà
        if(abs(a - d) == 2 && abs(b - h) == 1 || abs(a - d) == 1 && abs(b - h) == 2)
            if(array_f[d][h] == 0)// áûë ëè çäåñü ðàíüøå èëè íåò
            {
                ++p_f;
                array_f[d][h] = p_f;
                
                if(p_f == 64)
                    return 1;
                
                exite = horse(d, h, array_f, p_f);
                
                if(exite == 1)
                    return 1;
                
                if(exite == 0)// äîáàâòü òèïèêîâóþ ö/ê â êà÷åñòâå òóïèêà äëÿ äàííîé 
                {
                    for(c1 = 0; c1 < limit; c1++)
                    {               
                        if(array_t_x[c1] != d && array_t_y[c1] != h)
                        {
                            if(-1 == array_t_x[c1] && -1 == array_t_y[c1])
                            {
                                array_t_x[c1] = a;
                                array_t_y[c1] = b;
                                break;
                            }
                        }
                        else
                        {
                            k++;
                            break;
                        }
                    }
                }   
                
            }
            else //áûë òóïèê ðàíüøå èëè íåò(ïðîâåðêà òóïèêîâ äëÿ äàííîé ö/ê)
                for(c1 = 0; c1 < limit; c1++)
                    if(array_t_x[c1] != d && array_t_y[c1] != h)
                        if(-1 == array_t_x[c1] && -1 == array_t_y[c1])
                        {
                            array_t_x[c1] = a;
                            array_t_y[c1] = b;
                            k++;
                            break;
                        }
            
            h = rand() % 8;
            d = rand() % 8;
        // ñãåíåðèðîâàòü õîä, êîòîðûé íå ññûëàåòñÿ íà òóïèêîâóþ ö/ê
        
        for(c1 = 0; c1 < limit; c1++)
            if(c_t_x[c1] == d && c_t_y[c1] == h)
            {
                while(c_t_x[c1] != d || c_t_y[c1] != h)
                {
                    h = rand() % 8;
                    d = rand() % 8;
                }
                    
                break;              
            }
    
    }
//âûõîä èç ö/ê
    return 0;
}
 
main()
{
    int c, c1;
    array[4][4] = 1;
    srand(time(NULL));
    horse(4, 4, array, 1);
    
    for(c = 0; c < 8; c++)
    {
        for(c1 = 0; c1 < 8; c1++)
            printf("%d ", array[c][c1]);
            
        puts("");
    }
 
}
Переменные: limit - количество ходов с данной клетки; p_f - номер шага; a - x и b - y клетки, на которой мы сидим; k - количество клеток, на которые ходил конь; d - y и h - x, следующего хода; c_t_x и c_t_y - массивы для записи тех клеток, которые были окружены занятыми клетками
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.08.2021, 16:36
Помогаю со студенческими работами здесь

Обход шахматной доски конем
Добрый вечер , форумчане. Передо мной стоит проблема написать программу на С++ (задача о ходе конем -довольно распространенная , конь...

Написать программу, реализующую обход доски шахматным конём
Конь находится в клетке (x1,y1).Нужно вывести любой его путь из (x1,y1) в (x2,y2).Если это невозможно - выведите &quot;NO&quot;. Входные...

Обход шахматной доски конём, используя метод перебора с возвратом
На шахматной доске n×m в первой строке в первом столбце находится конь. Составьте план перемещения коня по шахматной доске таким образом,...

Переписать визуальный проект в консольное приложение: Обход конем всех клеток шахматного поля.
Приветствую друзья!Прошу помощи у экспертов, т.к. ООП почти не изучал. Дана программа с исходниками и исполняемым файлом, рабочая, но с...

Нужно написать обход шахматной доски конем. На одну позицию можно стать один раз. Обеспечить алгоритм бектрекингу
Добрый вечер! очень прошу помогите реализовать программу на с \ с + +.


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru