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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ C++ DLL for C# entry point http://www.cyberforum.ru/cpp-beginners/thread659007.html
heared -> #ifndef _DLLTEST_H_ #define _DLLTEST_H_ #include <string> using namespace std; extern "C" __declspec(dllexport) string f1(string); #endif
C++ Гороскоп Приветик) Решите пожалуйста в ВС++ буду очень признательна))) В древнеяпонском календаре был принят 60-летний цикл из пяти 12-летних циклов, обозначенных цветами: зеленый, красный, желтый, белый и черный. В подциклах каждый год имел название одного из животный: крысы, быка, тигра, кролика, дракона, змеи, лошади, овцы, обезьяны, петуха, собаки и кабана. Началом очередного цикла был 4-ый год нашей... http://www.cyberforum.ru/cpp-beginners/thread659004.html
Статический оператор "()" в классе C++
Друзья, чем можно объяснить запрет на создание статического "operator ()" в классе? Связано ли это как-то с его возможностью принимать разное количество параметров (насколько я помню, это же один оператор с таким свойством)?
C++ В двумерном массиве найти столбцы с минимальным произведением элементов.
Текст задания: В двумерном массиве найти столбцы с минимальным произведением элементов. Поиск произведения элементов столбца выделить в отдельную функцию.
C++ создание динамического массива внутри функции http://www.cyberforum.ru/cpp-beginners/thread658992.html
Люди, помогите пожалуйста. Нужно написать функцию, которая читает из файла числа (их количество заранее неизвестно) и записывает их в динамический массив. Массив создается там же в функции и, в конечном итоге, выдается в основную программу. Код : void formimp (char *impulse,double *arr, int &n) { FILE *fp=0; fp=fopen(impulse,"rt+"); int i=0; double h1,h2; while (!feof(fp)) {
C++ Обратная матрица Привет, ребят) решите пожалуйста задачку в BC++ Для заданной матрицы A(m,n) найти обратную {A}^{-1} , используя интерационную формулу: {A}^{-1}_{k}={A}^{-1}_{k-1}*(2E-A*{A}^{-1}_{k-1}) , где E -единичная матрица; {A}^{-1}_{0}=E. Интерационный процесс заканчивается, если для заданной погрешности \varepsilon справедливо |det(A*{A}^{-1}_{k})-1|<=E подробнее

Показать сообщение отдельно
Sometimes
Сообщений: n/a
27.09.2012, 12:55     Снова задача про ход коня
Здравствуйте. Задача: рекурсивно обойти шахматную доску конем (программа просто выводит один вариант решения, без дополнительных наворотов, первый ход делается случайным образом, после каждого хода экран перерисовывается). Подскажите, пожалуйста, как нужно исправить код, чтобы функция находила решение. Сейчас поиск происходит бесконечно.
Знаю, что задача поднималась уже много раз и в сети полно решений - я пересмотрел многие, и все программы усложнены пока неизвестными мне функциями. Я выбрал одно решение и попытался его переделать, ведь единственный способ понять рекурсию - это понять рекурсию) Спасибо.
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);
    
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru