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

Обход доски шахматным конем - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Меню для программы http://www.cyberforum.ru/cpp-beginners/thread263405.html
Подскажите пожалуйста как сделать в консольной программе на c++ главное меню вверху (файл, справка, об авторе и тд...)
C++ Массив Подскажите пожалуйста как реализовать на С вот такой фрагмент: Если элемент встречается в массиве 3к раз(число кратное трем), то продолжать работу и когда находится элемент который встречается не кратное трем число раз - выводить его на экран заранне спасибо http://www.cyberforum.ru/cpp-beginners/thread263404.html
Уравнения! C++
Подскажите как правильно написать эти уравнения? Вот всё что я осилил... X вместо а. void ysl1 (float X, float *tab) { tab = X * ((cos (X) + 14) / (sin (X) + 7)); }
Точка на плоскости. C++
!!!!!!!!!!!!!!!!!!!!!!!!!!!
C++ преобразование *argv[] http://www.cyberforum.ru/cpp-beginners/thread263385.html
Всем привет. Смысл задачи такой. Запускаю программу с параметром "с.txt" на который указывает *argv. Как сделать так, чтобы *argv указывал не на "c.txt" а на "c.out.txt". Естественно имя файла может быть произвольным.
C++ Найти сумму нечетных элементов. Постановка задачи. Решить указанные в варианте задачи, используя основные операторы языка С++. При решении задачи, использовать все типы циклов (for, while, do while). 1. Дана последовательность из n целых чисел. Найти сумму нечетных элементов этой последовательности. Создавайте темы с осмысленными и понятными названиями - это серьезно повышает шансы, что на ваш вопрос ответят.Пункт 2.3,... подробнее

Показать сообщение отдельно
olleg90
 Аватар для olleg90
34 / 34 / 6
Регистрация: 06.01.2011
Сообщений: 90
24.03.2011, 18:04     Обход доски шахматным конем
решал задачу "Тур конем". :
На шахматной доске размером n*n на поле с координатами x0,y0 находится конь - фигура , перемещающаяся по шахматным правилам. Задача заключается в поиске последовательности ходов, при которых конь точно один раз побывает на всех полях доски.
Проблема:
Решить задачу самостоятельно не получилось, хоть она и считается классической (на рекурсии с возвратом). воспользовался книгой Н. Вирта "алгоритмы и структуры данных".
нашел там алгоритм и код на паскале.
код:
Pascal
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
 program KnightWay;
       const
         n=8;
         dx: array [1..8] of integer=(-1,1,2,2,1,-1,-2,-2);
         dy: array [1..8] of integer=(2,2,1,-1,-2,-2,-1,1);
       var Solution: array [1..n,1..n] of integer;
         // массив ходов
procedure TryM(x,y: integer; var Success: boolean);
 procedure Try0(i,x,y: integer);
 var k,             // номер кандидата
      u,v: integer; // координаты следующего хода коня
 begin
   k:=0;
   repeat
      Inc(k);
      u:=x+dx[k]; v:=y+dy[k];
      if (u>0) and (u<=n) and (v>0) and (v<=n) and
        (Solution[u,v]=0) then
      begin
        Solution[u,v]:=i;
        if i<n*n then
        begin
          Try0(i+1,u,v);
          if not Success then
            Solution[u,v]:=0;
        end
        else Success:=True;
      end
   until Success or (k=8);
 end;
var i,j: integer;
begin // TryM
  for i:=1 to n do
  for j:=1 to n do
    Solution[i,j]:=0;
  Solution[x,y]:=1;
  Success:=False;
  Try0(2,x,y);
end; // TryM
var x0,y0: integer;
    Success: boolean;
begin // основная программа
  read(x0,y0);
  TryM(x0,y0,Success);
  if Success then
     WriteArr(Solution,n); // вывод массива ходов
  else writeln('решений нет');
end.
Далее я попытался реализовать эту программу на с++
код:
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
#include <iostream>
#include <conio.h>
#include <fstream>
 
using namespace std;
 
 
bool Success=NULL;
int Solution [8][8];
 
void Try0(int i,int x,int y,int *dx,int *dy,int n)
{
 int k,             // номер кандидата
      u=0,v=0; // координаты следующего хода коня
 k=0;
 
  do
 {
      k++;
  u=x+dx[k]; 
  v=y+dy[k];
  if((u>0)&&(u<=n)&&(v>0)&&(v<=n)&&(Solution[u][v]=0)) 
  {
        Solution[u][v]=i;
        if (i<n*n)
  {
          Try0(i+1,u,v,dx,dy,n);
          if (!Success) Solution[u][v]=0;
  }
        else Success=true;
  }
 }
  while (Success||k<8);
}
 
void TryM(int x,int y,int *dx,int *dy,int n)
{
int i,j;
for (i=0;i<n;i++)for(j=0;j<n;j++)Solution[i][j]=0;
  Solution[x][y]=1;
  Success=1;
  Try0(2,x,y,dx,dy,n);
}
 
void main()
{
setlocale(LC_ALL,"");
int dx[] ={-1,1,2,2,1,-1,-2,-2},
dy[]={2,2,1,-1,-2,-2,-1,1};
int x,y;
const int n=8;
cout<<"введите x"<<endl;
cin>>x;
cout<<"введите y"<<endl;
cin>>y;
TryM( x,y,dx,dy,n);
if(Success)
 for (int i=0;i<n;i++)
 {
  cout<<endl;
  for(int j=0;j<n;j++)
  cout<<Solution[i][j]<<" ";
 }
else cout<<"Решений нет";
  cout<<endl;
 system ("pause");
}
Уважаемые форумчане, помогите пожалуйста найти ошибку или подсказать свой вариант программы ибо моя прога не работает. Т.е. она компилируется но получить осмысленный результат мне так и не удалось.

P.S. заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru