Форум программистов, компьютерный форум 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, являющихся квадратами четных чисел" подробнее

Показать сообщение отдельно
undertacker
 Аватар для undertacker
9 / 9 / 0
Регистрация: 28.04.2013
Сообщений: 55
26.05.2013, 19:37     Головоломка о путешествии коня
strange_man, если еще нужно,
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
154
155
156
157
#include <iostream>
#include <iomanip>
 
//глобальные константы, определяющие размерность массива board
const int hor = 8, ver = 8;
//прототип функции для вывода массива, имитирующего шахматную доску, на экран   
void printBoard(int[][ver]);  
using namespace std;
 
int main()
{
   //выделяем память для массива, эмитирующего шахматную доску
   int board[hor][ver] = {0};                        
   //описываем этими двумя массивами варианты ходов конем на доске(их всего восемь от 0 до 7)
   int horizontal[hor] = { 2, 1,-1,-2,-2,-1, 1, 2};  
   int vertical[ver] =   {-1,-2,-2,-1, 1, 2, 2, 1};
   //массив доступности ходов конем  
   int accessibility[hor][ver] = {{2,3,4,4,4,4,3,2}, 
                                  {3,4,6,6,6,6,4,3},
                                  {4,6,8,8,8,8,6,4},
                                  {4,6,8,8,8,8,6,4},
                                  {4,6,8,8,8,8,6,4},
                                  {4,6,8,8,8,8,6,4},
                                  {3,4,6,6,6,6,4,3},
                                  {2,3,4,4,4,4,3,2}};
   //переменные, запоминающие текущие координаты нахождения коня
   int currentRow, currentColumn;
   //переменная, определяющая вариант хода конем(от 0 до 7)                    
   int moveNumber;
   //счетчик ходов конем                                   
   int counter = 0;                                  
 
   //предложение ввода координаты нахождения коня по горизонтали
   cout << "Enter a horizontal coordinate(0 - 7): "; 
   //сохранение введенных данных в переменной
   cin >> currentRow;
   //ввод координаты по вертикали                                
   cout << "Enter a vertical coordinate(0 - 7): "; 
   //сохранение данных ввода  
   cin >> currentColumn;                             
   
   //переменные currentRow и currentColumn модифицируються для изменения доступностей, поэтому сохраняем их
   int mainRow = currentRow, mainColumn = currentColumn;
   //переменные для записи координат следующего хода конем 
   int Row, Column; 
   
   //начинаем поиск решения
   for(int i = 1; i <= 64; i++)                      
   {
      board[mainRow][mainColumn] = ++counter;
      
      //делаем равным максимально возможной доступности
      int minAccessibility = 8;
      //временные переменные для исследования субдоступностей  
      int minA = 8, minB = 8;  
      
      //уменьшение доступности на единицу клеток, расположенных в одном ходу от выбранной
      for(moveNumber = 0; moveNumber <= 7; moveNumber++) 
      {
         //запоминаем положение коня на доске перед модификацией для изменения доступностей
         currentRow = mainRow;      
         currentColumn = mainColumn;
         
         //исследуем доступность всех возможных ходов не выходящих за границы доски
         currentRow += horizontal[moveNumber];  
         currentColumn += vertical[moveNumber];
         
         //не выходит ли за границы доски
         if(currentRow >= 0 && currentRow <= 7 && currentColumn >= 0 && currentColumn <= 7) 
         {
            //уменьшаем доступность всех клеток в одном ходу
            accessibility[currentRow][currentColumn]--;  
            
            //если доступность больше, то меняем на меньшую
            if(minAccessibility > accessibility[currentRow][currentColumn] && board[currentRow][currentColumn] == 0)  
            {
               //нашли минимальную доступность и ее координаты
               minAccessibility = accessibility[currentRow][currentColumn];  
               
               //если не ходили на нее еще то делаем на нее ход
               if(board[currentRow][currentColumn] == 0)  
               {
                  //подготовили координаты к ходу на эту клетку
                  Row = currentRow;  
                  Column = currentColumn;
               }
               //временных переменные для нахождения минимальной доступности у тех, что меньше
               int RowA = currentRow, ColumnA = currentColumn; 
               
               for(int moveA = 0; moveA <= 7; moveA++)
               {
                  RowA += horizontal[moveA];
                  ColumnA += vertical[moveA];
                  
                  if(RowA >= 0 && RowA <= 7 && ColumnA >= 0 && ColumnA <= 7)
                  {
                     if(minA >= accessibility[RowA][ColumnA] && board[RowA][ColumnA] == 0)
                        //наименьшая доступность следующего хода
                        minA = accessibility[RowA][ColumnA]; 
                  }
               }
            }
   
            //если доступности равны
            if(minAccessibility == accessibility[currentRow][currentColumn] && board[currentRow][currentColumn] == 0)  
            {
               minAccessibility = accessibility[currentRow][currentColumn];
               
               //временных переменные для нахождения минимальной доступности у тех, что равны
               int RowB = currentRow, ColumnB = currentColumn; 
               
               for(int moveB = 0; moveB <= 7; moveB++)
               {
                  RowB += horizontal[moveB];
                  ColumnB += vertical[moveB];
                  
                  if(RowB >= 0 && RowB <= 7 && ColumnB >= 0 && ColumnB <= 7)
                  {
                     if(minB >= accessibility[RowB][ColumnB] && board[RowB][ColumnB] == 0)
                        //наименьшая доступность следующего хода
                        minB = accessibility[RowB][ColumnB]; 
                  }
               }
   
               //если не ходили на нее еще то делаем на нее ход
               if(board[currentRow][currentColumn] == 0 && minB < minA)  
               {
                  //изменяем подготовленные для следующего хода координаты в случае, если доступность следующего хода меньше
                  Row = currentRow;       
                  Column = currentColumn;
               }
            }
         }
      }
   
      mainRow = Row;
      mainColumn = Column;
   }
   
   //вызов функции для печати массива, моделирующего шахматную доску
   printBoard(board);                                
   system ("pause void");
   return 0;
}
   
//вывод массива, печатающего шахматную доску, на экран
void printBoard(int array[][ver])   
{
   cout << endl;
   for(int j = 0; j < ver; j++)
   {
      for(int i = 0; i < hor; i++)
         cout << setw(4) << array[i][j];
         
      cout << endl << endl;
   }
}
Добавлено через 6 часов 21 минуту
strange_man, и вопрос от меня. Ты по времени сколько ее делал?
 
Текущее время: 02:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru