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

Головоломка о путешествии коня - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Определить, принадлежит ли точка с координатами (Х,У) заштрихованной части плоскости. http://www.cyberforum.ru/cpp-beginners/thread694523.html
Даны целые числа Х,У. Определить, принадлежит ли точка с координатами (Х,У) заштрихованной части плоскости. Составить математическую модель, алгоритм и программу. помогитеплиззз
C++ openglu glut b ошибки в глуте я не нашёл glutMouseWheelFunc, в опен глуте вылетает - то что openglut.dll не найденна и отладчик пишет ещё про 6 каких то dll(не помню какие точно) что делать? Добавлено через 8 минут извените за флуд, проблемма решается как всегда переброской dll в папку виндовс(у меня просто одна старая винда и я нв неё кидал ,а надо было в рабочию винду кидать библиотеки))) Добавлено через 6... http://www.cyberforum.ru/cpp-beginners/thread694522.html
Как выводить utf-8 на экран? C++
Как у вас обстоят дела с выводом UTF-8 на консоль windows? UTF-16 она не поддерживает, но похоже что у нее (или у меня) и с UTF-8 проблемы. Имеется код: #include "convert.h" #include <iostream> int main() { std::wstring text = L"El es el dueño de toda la tecnología."; std::wstring textCyrillic = L"А также немного кириллицы :-)";
C++ Редактор "Схема алгоритмов" - принадлежит ли точка сложной фигуре
Как определить, что точка принадлежит сложной фигуре. С простыми: круг, прямоугольник вроде понятно. А как быть с такими, как на картинке. Причем, в PowerDisigner'е объект выделяется по клику только в пределах фигуры, т.е. PowerDisigner не хранить просто координаты прямоугольника или круга (куда вписана фигура, например, такая как, звезда), а как то сохраняет координаты всех сторон самОй сложной...
C++ Нужно оптимизировать http://www.cyberforum.ru/cpp-beginners/thread694502.html
Есть задание, есть готовый код. Но он не проходит скоростной режим, нужно оптимизировать, помогите плз) Требуется найти количество строк заданной длины n, состоящих из латинских строчных букв, не содержащих s в качестве подстроки. Поскольку количество подстрок может быть велико, выведите ответ по модулю 1000000007. Входные данные: Первая строка содержит число n(1 ≤ n ≤ 1000) - длину...
C++ Определить количество членов последовательности, являющихся квадратами четных чисел напишите пожалуйста код на C ++ для задачи "даны натуральные числа n, a1...an, определить количество членов ak последовательности a1 ... an, являющихся квадратами четных чисел" подробнее

Показать сообщение отдельно
strange_man
 Аватар для strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 117
11.11.2012, 14:02     Головоломка о путешествии коня
Задача - составить такую последовательность ходов, при которой конь может обойти всю шахматную доску, побывав на каждой клетке лишь один раз, при этом не важно, с какой клетки фигура начнет свое путешествие.
У меня задача вышла, но только для 63 начальных клеток.
В учебнике для этой задачи есть пункт d) - написать программу так, чтобы при встрече с двумя или более альтернативными клетками, у которых одинаковый уровень доступности (то бишь со скольки клеток можно сделать ход сюда), решала бы, какую выбрать, чтобы после следующего хода конь смог походить на клетку с меньшим уровнем доступности.
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
#include <iostream>
 
using namespace std;
 
void calculateAccessibility (int [][8], const int[], const int[]); //calculates accessibility of each square;
int determineMoveNumber (int, int, int[][8], const int [], const int [], int[][8]); //determines the most efficient move;
void decrementAccessibility (int, int, int[][8], const int[], const int[], int[][8]); // when knight is gone it decrements accessibility of all nearby squares where knight can go;
 
int main()
{
    int horizontal[8] = { 2, 1, -1, -2, -2, -1, 1, 2 };
    int vertical[8] = { -1, -2, -2, -1, 1, 2, 2, 1 };
 
    for (int startPointX = 0; startPointX <= 7; startPointX++)  // we can check if program working correctly when knight starts his travelling from each square;
        for (int startPointY = 0; startPointY <= 7; startPointY++)
        {
            int board[8][8] = { 0 }; // starting board is empty. no moves have done yet;
            int accessibility[8][8] = { 0 }; //accessibility of each square will be calculated later. now it equals 0;
 
            int currentRow = startPointY; // Y coordinate of starting square;
            int currentColumn = startPointX; // X coodinate of starting square;
            int numberOfTurns = 0; //counter;
            int moveNumber; // knight can do 8 different moves. they will have values from 0 to 7;
            int &m = moveNumber; 
 
            calculateAccessibility (accessibility, vertical, horizontal);
 
            for (int i = 1; i <= 64; i++)
            {   
                board[currentColumn][currentRow] = 1; //marks square where knight is gone;
                numberOfTurns++; //incrementing counter;
                decrementAccessibility (currentRow, currentColumn, accessibility, vertical, horizontal, board);
                m = determineMoveNumber(currentRow, currentColumn, accessibility, vertical, horizontal, board); 
                if (m == -1) //if there are no possible moves program will stop;
                    break;
                //knight does new turn:
                currentRow += vertical[m]; 
                currentColumn += horizontal[m];
            }
            
            cout << startPointX << "-" << startPointY << ": " << numberOfTurns << " turns" << endl;
        }
    system("pause");
    return 0;
}
 
void calculateAccessibility (int accessibility[][8], const int vertical[], const int horizontal[])
{
    for (int i = 0; i <= 7; i++)
        for (int j = 0; j <= 7; j++)
        {
            int currentRow = j;
            int currentColumn = i;
            int n = 0;
 
            do {
                currentRow += vertical[n];
                currentColumn += horizontal[n];
                if (currentRow >= 0 && currentRow <= 7 && currentColumn >= 0 && currentColumn <= 7)
                    ++accessibility[currentColumn][currentRow];
                currentRow -= vertical[n];
                currentColumn -= horizontal[n];
                n++;
            } while (n < 8);
        }
}
 
int determineMoveNumber (int row, int column, int accessibility[][8], const int vertical[], const int horizontal[], int board[][8])
{
    int min = 8; //minimal accessibility of square where knight can go from here;
    int move = -1; //on start it equals -1. if it isn't change function will return -1 and program swill stop.
 
    for (int n = 0; n <=7; n++) //counting all ways of moving
    {
        //doing pseudoturn
        row += vertical[n]; 
        column += horizontal[n]; 
 
        if (board[column][row] == 0 && row >= 0 && row <= 7 && column >= 0 && column <= 7) //cheking if knight crossed out of boards or if it have already been on this square;
            //if accessibility of this square is lower than minimal value, program gives 'move' variable a value of this way of turn
            if (accessibility[column][row] < min) 
            {
                min = accessibility[column][row];
                move = n;
            }
            //if turn is possible move must have a value, even if it's have accessibility of 8;
            else if (min == 8)
                move = n;
 
        //restore starting position
        row -= vertical[n];
        column -= horizontal[n]; 
    }
 
    return move;
}
 
//when move is done we have to decrement accessibility some squares
void decrementAccessibility (int row, int column, int accessibility[][8], const int vertical[], const int horizontal[], int board[][8])
{
    for (int n = 0; n <= 7; n++)
    {
        row += vertical[n];
        column += horizontal[n];
 
        if (board[column][row] == 0 && row >= 0 && row <= 7 && column >= 0 && column <= 7)
            --accessibility[column][row];
 
        row -= vertical[n];
        column -= horizontal[n];
    }
}
Миниатюры
Головоломка о путешествии коня  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 07:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru