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

Обход доски конем - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ C++ создание матрицы http://www.cyberforum.ru/cpp-beginners/thread646802.html
только начал учить С++ и возникла проблема при попытке создать матрицу. Нужно создать матрицу с динамическими размерами , но я пошел от простого. Подскажите почему вы не хочет в массив primary добавлять другие массивы? void createMatrix() { int first, second, third; cout<<"first Line \n"; cin>> first>>first>>first; cout<<"second Line \n";
C++ Ошибка expected constructor, destructor, or type conversion before ';' token выдает ошибку expected constructor, destructor, or type conversion before ';' token с 61-90 строчку.че делать уже не знаю.проверяла код #include <iostream> #include <cstdlib> #include <string.h> #include <stdio.h> #include <iomanip> #include <conio.h> #define N 3 http://www.cyberforum.ru/cpp-beginners/thread646792.html
работа с файлами на Code::Blocks С++ C++
Добрый вечер, Уважаемые Форумчани. Помогите мне пожалуйста в поисках информации по работе с файлами С++ на Code::Blocks В частности меня очень интересует как можно переписать код: Программа запрашивает имя, пока не введем -1. Хотелось переписать на тоже самое, но чтобы программа запоминала введенные данные. Вот код программы:
C++ Оператор new
Приветствую. Есть такой вопрос. Почему одни программисты используют оператор new, а другие нет? Ведь если создавать объект этими способами class test { /* code */ } void test_function(){ test varr; // 1 способ test varrr= new test(); // 2 способ }
C++ #include <iostream> Очень Подробно =) http://www.cyberforum.ru/cpp-beginners/thread646781.html
Помогите пожалуйста, добрые люди :cry: Вот такая вот проблема .... искал инфу повсюду, но к сожалению она минимальна. Что такое <iostream>? В Википедии написано, что это файл, который содержит классы и функции... 1. Сразу вопрос он реально существует (такой файл) ? 2. Как язык С++ переводит команды на низкие уровни? То есть в iostream получается лежит часть компилятора, который отвечает за...
C++ Попрошу разъяснить что означает : list , символ -> и как обратиться к переменным , которые заданы в структуре (inf , next). Добрый вечер. Попрошу помочь с следующим кодом : #include <cstdlib> #include <iostream> #include <list> using namespace std; struct { int inf; подробнее

Показать сообщение отдельно
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
04.09.2012, 21:21     Обход доски конем
Известная задача обхода доски nxn конем.
по условию на написать рекурсивную программу на С или С++, причем рекурсивная функция должна иметь вид
C
1
  void horses(int n, int k, int *x, int *y);
где k - количество уже заполненных (в данном узле) клеток доски, x - массив размера n, в x[i] хранится x-координата i-го ход, в y[i] -- хранится y-координата i-го хода конём.
Я нашел работающий вариант на
http://www.dmtsoft.ru/bn/363/as/oneaticleshablon
вот он в сокращении
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
#include <stdio.h>
#include <conio.h>
int dx[9], dy[9], h[29][29] ;
....
 int horses(int n,int k,int x,int y)
    // возвращает 1, если доска заполнена, 0 - если нет продолжений
    {int j, u, v , q1=0 ;
     for(j=1; (!q1) && (j<=8); j++)
     {
      u=x+dx[j] ; v=y+dy[j] ;
      if ( 1<= u && u <=n && 1 <=v && v<=n && h[u][v]==0)
       {
        h[u][v] =k ; //заполнение матрицы nxn доски ходами
        if (k<n*n) {//
          q1 = horses(n,k+1,u,v) ;
          if (q1==0) h[u][v]=0 ;               //!!!
                   }
        else q1 = 1 ;
      }
    }
     return q1 ;
    }
    int main()
    { int i,j, n, n2;
    dx[1] = 2; dx[2] = 1; dx[3] = -1; dx[4] = -2;
    dx[5] = -2; dx[6] = -1; dx[7] = 1; dx[8] = 2;
    dy[1] = 1; dy[2] = 2; dy[3] = 2; dy[4] = 1;
    dy[5] = -1; dy[6] = -2; dy[7] = -2; dy[8] = -1;
    printf("n=?\n");scanf("%i",&n);
    h[1][1]=1 ;//поставили коня на a1
    if (horses(n,2,1,1)==0) printf("\nnet reshenija") ;
    else prntf(n) ;
    getch() ;
    return 0;
    }
-------------------------------------------
И начал его переделывать под задание.Получилось вот что
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
 int horses(int n,int k,int *x,int *y)
    // возвращает 1, если доска заполнена, 0 - если нет продолжений
    {int j,j1, u, v , q1=0 ;  int ia=0;
     for(j=1; (!q1) && (j<=8); j++)
     {
      u=x[k-1]+dx[j]; v=y[k-1]+dy[j];
      if (1<=u && u <=n && 1<=v && v<=n) ia=1;
      for (j1=0;j1<k;j1++)
       {if (x[j1]==u && y[j1]==v) {ia=0; break;};}
      if (ia==1)
       {
        if (k<n*n) {//
         x[k]=u;y[k]=v;
         q1 = horses(n,k+1,x,y) ;
         //if (q1==0) k=k-1;//здесь непонятно что делать-если неудача то k -не трогать ???
                   }
        else q1 = 1 ;
      }
    }
     return q1 ;
    }
    int main()
    { int i,j, n, n2; int *x; int *y;
    dx[1] = 2; dx[2] = 1; dx[3] = -1; dx[4] = -2;
    dx[5] = -2; dx[6] = -1; dx[7] = 1; dx[8] = 2;
    dy[1] = 1; dy[2] = 2; dy[3] = 2; dy[4] = 1;
    dy[5] = -1; dy[6] = -2; dy[7] = -2; dy[8] = -1;
    printf("n=?\n");scanf("%i",&n);n2=n*n;
    x=malloc(n2*sizeof(int));  y=malloc(n2*sizeof(int));
     x[0]=1;y[0]=1;//поставили коня на a1
    if (horses(n,1,x,y)==0) printf("\nnet reshenija") ;
    else prntf(n,x,y) ;
    getch() ;
    return 0;
    }
1 вариант работает корректно, (хотя на некоторых матрицах и начальных положениях подвисает или очень долго работает)
а для n=5 2-й вариант выдает вот что (каждая строчка это пара номер строки-номер столбца клетки доски после очередного хода. Начало из 1-1 (клетка А1)
1 1
3 2
5 3
4 5
2 4
1 2
3 3
5 4
3 5
1 4
2 2
4 3
5 5
3 4
1 5
2 3
4 2
2 1
1 3
2 5
4 4
5 2
6 0
4 -1
2 0
расхождения с правильным начались с 8 строки 5 4 и далее.
Правильный вариант 8 строки 4-1 или клетка D1
Какая ошибка при переделки программы? Может быть счетчик шагов k передавать не по значению а через указатель?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru