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

Путешествие коня. Почему конь не хочет пробежать все возможные варианты? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Задача на создание символьного файла http://www.cyberforum.ru/cpp-beginners/thread519721.html
Дан текстовый файл. Создать символьный файл, содержащий все сим-волы, встретившиеся в тексте, включая пробел и знаки препинания (без повторений). Символы располагать в порядке их первого появления в тек-сте.
C++ Кусочно-линейная аппроксимация Добрый времени суток всем. Необходима помощь в написание алгоритма кусочно-линейной аппроксимации. У меня дана таблица зависимости, грубо говоря градуировка сигнала x(Вход) и y(Выход). Например: x y 4 10 5 15 10 30 К примеру при входном сигнале 7, нужно определить в какой диапазон X-a попадает данное число, а потом применив алгоритм кусочно-линейной аппроксимации... http://www.cyberforum.ru/cpp-beginners/thread519713.html
Найти и вывести номера структур, содержащих числа больше заданного C++
Имеется база данных, содержащая числители и знаменатели дробных чисел. Например, последовательность чисел 5/18, 7/13, 9/8, … хранится в виде: Номер структуры 1 2 3 … Числитель 5 7 9 … Знаменатель 18 13 8 … Найти и вывести номера структур, содержащих числа больше заданного (оно вводится с клавиатуры в десятичной форме), и сами числа (тоже в десятичной форме).
C++ помогит пожалуйста с программой «Обработка массивов в С++»
Тема «Обработка массивов в С++» Задание: Необходимо написать и отладить программу в среде Borland C++ 3.1 по задан- ному варианту с обязательным применением массивов. В массивах вещественных чисел X и Y записаны координаты точек на плоскости. Найти длины отрезков Ri=((xi+1-xi)2+(yi+1-yi)2)1/2 и определить отрезок наибольшей и наименьшей длины.
C++ Созадать/записать в файл, из под другой учетки. http://www.cyberforum.ru/cpp-beginners/thread519673.html
Приветствую, не подскажите как произвести данную манипуляцию? Даже копать в какую сторону не знаю, была мысль создать доп. программу, запускать с помощью CreateProcessWithLogonW() и передавать ей параметры.
C++ Динамическая память, проблемы с освобождением Всем привет! Проблема стара как этот мир, но есть некая отличительная черта по которой я создал эту тему. Задача следующая. Создаю файл и кидаю в него строку, закрываю файл. Далее открываю этот файл и помещаю содержимое файла в динамическую строку. Так вот проблема возникает на третьей итерации при освобождении памяти. Почему так происходит, почему ошибка не выскакивает при первом удалении.... подробнее

Показать сообщение отдельно
Rusl_v
13 / 12 / 1
Регистрация: 22.12.2010
Сообщений: 67

Путешествие коня. Почему конь не хочет пробежать все возможные варианты? - C++

15.03.2012, 21:34. Просмотров 2507. Ответов 7
Метки (Все метки)

Всем привет.
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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    
    const int size=8;
    
    int horizontal[size]={2,1,-1,-2,-2,-1,1,2};//Ходы коня
    int vertical[size]={-1,-2,-2,-1,1,2,2,1};
    
    int board [size][size]={0};//Массив доски
    
    int recmove=1;//Запись хода
    int x=1,y=1;//Координаты коня
    int verticalx,horizontaly;//Временные координаты коня
    
    for(int i=1;i<=64;i++){
 
    int moveNumber=0;           //Обнуляем ходы
        while(moveNumber<size){
        
            verticalx=x;
            horizontaly=y;
 
            verticalx+=vertical[moveNumber];    //Ходим конём
            horizontaly+=horizontal[moveNumber];
 
            if (verticalx<0||verticalx>7)   //Проверка на выход из массива
                moveNumber++;   //Следующий возможный ход
            else if (horizontaly<0||horizontaly>7)
                moveNumber++;
            else if (board[verticalx][horizontaly]==1)
                moveNumber++;
            else {      //Ход сделан
                board[verticalx][horizontaly]=recmove;
                recmove++;
                x=verticalx;
                y=horizontaly;
                moveNumber=8;//Причина наверное здесь !!!!!!!
            }
        }
    }
 
    cout<<"Ходы коня!"<<endl<<endl;
    for(int z=1,rec=1;z<=64;z++){   //Печатает номер хода и координаты
        for(int j=0;j<size;j++){
            for(int i=0;i<size;i++) 
                if (board[j][i]==rec){
                    cout<<rec<<" Ход "<<j<<"/"<<i<<endl;
                    rec++;
                }
        }
    }
    system("pause");
    return 0;
}
Почему конь не хочет пробежать все возможные варианты?
В чём проблема?
Когда убираю строку moveNumber=8; (с помощью неё мы выходим из цикла while(когда конь походил) и обнуляем наши ходы,вроде всё логично)
Цикл for включен на максимальное кол-во ходов(но без стратегии он конечно столько не пробежит).

Максимальный пробег коня 16 ходов если убрать moveNumber=8;(при том что у коня есть варианты бегать),а если не убирать moveNumber=8 то 4 хода пробег и конь умирает((
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru