Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Задача на создание символьного файла https://www.cyberforum.ru/ cpp-beginners/ thread519721.html
Дан текстовый файл. Создать символьный файл, содержащий все сим-волы, встретившиеся в тексте, включая пробел и знаки препинания (без повторений). Символы располагать в порядке их первого появления в тек-сте.
Кусочно-линейная аппроксимация C++
Добрый времени суток всем. Необходима помощь в написание алгоритма кусочно-линейной аппроксимации. У меня дана таблица зависимости, грубо говоря градуировка сигнала x(Вход) и y(Выход). Например: x y 4 10 5 15 10 30 К примеру при входном сигнале 7, нужно определить в какой диапазон X-a попадает данное число, а потом применив алгоритм кусочно-линейной аппроксимации...
C++ Найти и вывести номера структур, содержащих числа больше заданного https://www.cyberforum.ru/ cpp-beginners/ thread519695.html
Имеется база данных, содержащая числители и знаменатели дробных чисел. Например, последовательность чисел 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 и определить отрезок наибольшей и наименьшей длины. https://www.cyberforum.ru/ cpp-beginners/ thread519678.html
Созадать/записать в файл, из под другой учетки. C++
Приветствую, не подскажите как произвести данную манипуляцию? Даже копать в какую сторону не знаю, была мысль создать доп. программу, запускать с помощью CreateProcessWithLogonW() и передавать ей параметры.
C++ Динамическая память, проблемы с освобождением https://www.cyberforum.ru/ cpp-beginners/ thread519653.html
Всем привет! Проблема стара как этот мир, но есть некая отличительная черта по которой я создал эту тему. Задача следующая. Создаю файл и кидаю в него строку, закрываю файл. Далее открываю этот файл и помещаю содержимое файла в динамическую строку. Так вот проблема возникает на третьей итерации при освобождении памяти. Почему так происходит, почему ошибка не выскакивает при первом удалении....
C++ Помогите с задачей пожалуйста https://www.cyberforum.ru/ cpp-beginners/ thread519649.html
Нужно вывести массив n*n с элементами типа:с плавающей точкой при помощи оператора цикла while. вывести исходное состояние массива при помощи оператора цикла do while. обменять значения строки, в которых находятся наименьший и наибольший элементы. если это одна и та же строка, записать её значения в обратном порядке. вывести результаты обработки массива желательно использовать только...
помогите написать все возможные, эквивалентные данному фрагменты программы, с использованием других операторов цикла C++
for i:=10 downto 1 do a:=(a mod*i)/j;i:=i+1;
C++ Первая программа и уже не работает... https://www.cyberforum.ru/ cpp-beginners/ thread519639.html
Недавно купил книгу по C++, начал изучать...и так получилось, что уже первая программа не работает Код из книги #include <iostream> using namespace std; int main() { cout << "My first program"; return:0; }
C++ Перегнать с паскаля на чистый С Вот эту програму нужно пергнать с паскаля на чистый С program pr_19; uses CRT; var f,g,d:file of integer; a,s,h,n,i:integer; begin clrscr; assign(f,'input.dat'); assign(g,'vid.dat'); https://www.cyberforum.ru/ cpp-beginners/ thread519636.html
Составление программ на использование двумерных массивов C++
Написать программу, которая запрашивает размерность двумерного массива, заполняет его случайными числами от 4 до 12 и меняет местами первый и последний столбец массива. Добавлено через 1 час 6 минут upupup
C++ Ошибка структуры о_О https://www.cyberforum.ru/ cpp-beginners/ thread519605.html
void AlgA (ListElem*begin1, ListElem*begin2, ListElem*&begin3) //Составляем третий список из элементов, которые входят в первый и второй { if (!begin1) return; if (!begin2) return; ListElem*curr1 = begin1; ListElem*curr2 = begin2; while (curr1)
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
03.04.2012, 02:44 0

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

03.04.2012, 02:44. Показов 3984. Ответов 7
Метки (Все метки)

Ответ

Делал как то тоже, относительно недавно, в прошлом году. По заданию из Дейтелов. Вот что получилось ( там по заданию если попадались из текущих возможных ходы с одинаковыми числами доступности, то нужно проверять на 1 ход вперед, какой предпочесть ), вдруг поможет, размер доски можно в принципе любой ( естественно не отрицательный ), массив доступности сам подстраивается:
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include <iostream>
#include <iomanip>
 
std::size_t digitsInNumber( int number ) {
    int digits = 1;
 
    while ( number /= 10 )
        digits++;
 
    return digits;
}
 
void arrayOutput( const int* const *const array, const int size ) {
    std::size_t w = digitsInNumber( size * size );
 
    for ( int i = 0; i < size; i++ ) {
        for ( int j = 0; j < size; j++ )
            std::cout << std::setw( w ) << array[ i ][ j ] << ' ';
 
        std::cout << std::endl;
    }
}
 
void resetBoard( int **b, const int size ) {
    for ( int i = 0; i < size; i++ )
        for ( int j = 0; j < size; j++ )
            b[ i ][ j ] = 0;
}
 
void resetAccessibility( int **a, const int boardSize, const int vertical[], const int horizontal[], const int movesSize ) {
    resetBoard( a, boardSize );
 
    for ( int i = 0; i < boardSize; i++ ) {
        for ( int j = 0; j < boardSize; j++ )
            for ( int k = 0; k < movesSize; k++ )
                if ( i + vertical[ k ] >= 0 && i + vertical[ k ] < boardSize && j + horizontal[ k ] >= 0 && j + horizontal[ k ] < boardSize )
                    a[ i + vertical[ k ]][ j + horizontal[ k ]]++;
    }
}
 
int **initMatrix( const int size ) {
    int** tmpArr = new int*[ size ];
 
    for ( int i = 0; i < size; i++ ) {
        tmpArr[ i ] = new int[ size ];
 
        for ( int j = 0; j < size; j++ )
            tmpArr[ i ][ j ] = 0;
    }
 
    return tmpArr;
}
 
bool moveIsPosible( const int posX, const int posY, int **board, const int size ) {
    return ( posX >= 0 && posX < size && posY >= 0 && posY < size && board[ posX ][ posY ] == 0 );
}
 
int main() {
    const int sizeOfBoard = 8,
              sizeOfMoves = 8;
 
    const int vertical[ sizeOfMoves ] = { -1, -2, -2, -1, 1, 2, 2, 1 },
              horizontal[ sizeOfMoves ] = { 2, 1, -1, -2, -2, -1, 1, 2 };
 
    int **board = initMatrix( sizeOfBoard ),
        **accessibility = initMatrix( sizeOfBoard );
 
    int currentRow = 0,
        currentColumn = 0,
        moveNumber = 0,
        move = 0,
        completeJourneys = 0;
 
    for ( int row = 0; row < sizeOfBoard; row++ ) {
        for ( int col = 0; col < sizeOfBoard; col++ ) {
            resetBoard( board, sizeOfBoard );
            resetAccessibility( accessibility, sizeOfBoard, vertical, horizontal, sizeOfMoves );
 
            currentRow = row;
            currentColumn = col;
            board[ currentRow ][ currentColumn ] = move = 1;
 
            do {
                for ( int k = 0; k < sizeOfMoves; k++ ) {
                    if ( currentRow + vertical[ k ] >= 0 && currentRow + vertical[ k ] < sizeOfBoard && currentColumn + horizontal[ k ] >= 0 && currentColumn + horizontal[ k ] < sizeOfBoard )
                        accessibility[ currentRow + vertical[ k ]][ currentColumn + horizontal[ k ]]--;
                }
 
                moveNumber = -1;
 
                for ( int k = 0; k < sizeOfMoves; k++ ) {
                    if ( moveIsPosible( currentRow + vertical[ k ], currentColumn + horizontal[ k ], board, sizeOfBoard )) {
                        if ( moveNumber == -1 )
                            moveNumber = k;
                        else if ( accessibility[ currentRow + vertical[ k ]][ currentColumn + horizontal[ k ]] < accessibility[ currentRow + vertical[ moveNumber ]][ currentColumn + horizontal[ moveNumber ]])
                            moveNumber = k;
                        else if ( accessibility[ currentRow + vertical[ k ]][ currentColumn + horizontal[ k ]] == accessibility[ currentRow + vertical[ moveNumber ]][ currentColumn + horizontal[ moveNumber ]]) {
                            int tmpMoveNumber1 = -1,
                                tmpRowPos1 = currentRow + vertical[ moveNumber ],
                                tmpColPos1 = currentColumn + horizontal[ moveNumber ],
                                tmpMoveNumber2 = -1,
                                tmpRowPos2 = currentRow + vertical[ k ],
                                tmpColPos2 = currentColumn + horizontal[ k ];
 
                            for ( int n = 0; n < sizeOfMoves; n++ ) {
                                if ( moveIsPosible( tmpRowPos1 + vertical[ n ], tmpColPos1 + horizontal[ n ], board, sizeOfBoard )) {
                                    if ( tmpMoveNumber1 == -1 )
                                        tmpMoveNumber1 = n;
                                    else if ( accessibility[ tmpRowPos1 + vertical[ n ]][ tmpColPos1 + horizontal[ n ]] < accessibility[ tmpRowPos1 + vertical[ tmpMoveNumber1 ]][ tmpColPos1 + horizontal[ tmpMoveNumber1 ]])
                                        tmpMoveNumber1 = n;
                                }
 
                                if ( moveIsPosible( tmpRowPos2 + vertical[ n ], tmpColPos2 + horizontal[ n ], board, sizeOfBoard )) {
                                    if ( tmpMoveNumber2 == -1 )
                                        tmpMoveNumber2 = n;
                                    else if ( accessibility[ tmpRowPos2 + vertical[ n ]][ tmpColPos2 + horizontal[ n ]] < accessibility[ tmpRowPos2 + vertical[ tmpMoveNumber2 ]][ tmpColPos2 + horizontal[ tmpMoveNumber2 ]])
                                        tmpMoveNumber2 = n;
                                }
                            }
 
                            if (( tmpMoveNumber1 == -1 && tmpMoveNumber2 != -1 )
                                || (( tmpMoveNumber1 != -1 && tmpMoveNumber2 != -1 )
                                     && ( accessibility[ tmpRowPos2 + vertical[ tmpMoveNumber2 ]][ tmpColPos2 + horizontal[ tmpMoveNumber2 ]] < accessibility[ tmpRowPos1 + vertical[ tmpMoveNumber1 ]][ tmpColPos1 + horizontal[ tmpMoveNumber1 ]])))
                                moveNumber = k;
                        }
                    }
                }
 
                if ( moveNumber != -1 ) {
                    currentRow += vertical[ moveNumber ];
                    currentColumn += horizontal[ moveNumber ];
                    board[ currentRow ][ currentColumn ] = ++move;
                }
 
            } while ( moveNumber != -1 );
 
            if ( move == sizeOfBoard * sizeOfBoard )
                completeJourneys++;
        }
    }
 
    for ( int i = 0; i < sizeOfBoard; i++ ) {
        delete [] board[ i ];
        delete [] accessibility[ i ];
    }
 
    delete [] board;
    delete [] accessibility;
 
    std::cout << "Size of board: " << sizeOfBoard << " * " << sizeOfBoard << "\nComplete journeys: " << completeJourneys << " of " << sizeOfBoard * sizeOfBoard << std::endl;
 
    return 0;
}


Вернуться к обсуждению:
Путешествие коня. Почему конь не хочет пробежать все возможные варианты? C++
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2012, 02:44
Готовые ответы и решения:

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

Путешествие коня. Упрощеннаяя версия.
Здравствуйте! Мне препод задал более упрощенную версию задачи про путешествие коня. Условие задачи...

Вывести все возможные варианты перестановок от 1 до n
Здравствуйте, у меня есть массив чисел от 1 до n, нужно чтобы выводились все возможные варианты...

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

7
03.04.2012, 02:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2012, 02:44
Помогаю со студенческими работами здесь

Вычислить все возможные ходы коня
в шахматах задать начальные координаты клетки(х,у) и вычислить все возможные ходы коня из этой...

Все возможные варианты строки
Как из одной строки получить все возможные варианты? например так: Цитата: первая строка API...

Заменить все вопросительные знаки цифрами (от 1 до 9), перевести строку в число, вывести все возможные варианты
Дана строка состоящая из цифр и вопросительных знаков. Длина строки от 1 до 9 символов. Цель:...

Подсчитать все возможные варианты судоку
Лома голову, как посчитать все возможные варианты судоку. Как при этом описать правило, которое...

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