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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Катерька
0 / 0 / 0
Регистрация: 07.01.2013
Сообщений: 32
#1

Добавить размеры в код "Обход конем" - C++

15.01.2013, 23:27. Просмотров 1563. Ответов 43
Метки нет (Все метки)

Господа,решила в новой теме попросить помощи.есть код
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
#include <stdio.h>
#include <conio.h>
#define  size_row 10
#define  size_col 10
 
 
 
int main(void)
{
    
     int Ni=0; 
     int Nk=300;
     int y=255; 
     int n=253; 
     int s=0; 
     int e=254;
     int i,j;
     int R[size_row][size_col]= {            {s,y,y,y,y,y,y,n,n,n},
                                               {n,y,n,n,n,y,y,n,n,n},
                                                {y,y,n,n,n,y,n,n,n,n},
                                                {y,n,e,y,y,y,n,n,n,n},
                                               {y,y,y,n,n,n,n,n,n,n},
                                            {n,n,n,n,n,n,n,n,n,n},
                                               {n,n,n,n,n,n,n,n,n,n},
                                                {n,n,n,n,n,n,n,n,n,n},
                                                {n,n,n,n,n,n,n,n,n,n},
                                                {n,n,n,n,n,n,n,n,n,n} };
 
printf("labyrint pered algoritmem::" "\n \n");
   for (i=0; i < size_row; i++)
{
   for (j=0; j < size_col; j++)
   printf("%d\t",R[i][j]);
}
 
/*vlnovy algoritmus*/
while (Ni < Nk)
{
   for (i=0; i < size_row; i++)
   {
     for (j=0; j < size_col; j++)
     /*spousteni*/
     if (R[i][j]==Ni)
     {
         if (R[i][j+1]==255)
            R[i][j+1]=Ni+1;
         if (R[i][j-1]==255)
            R[i][j-1]=Ni+1;
         if (R[i+1][j]==255)
            R[i+1][j]=Ni+1;
         if (R[i-1][j]==255)
            R[i-1][j]=Ni+1;
         if ((R[i+1][j]==254) || (R[i-1][j]==254) || (R[i][j+1]==254) || (R[i][j-1]==254))
         {  
            //printf(
            //getch(); 
            //return 0; 
            //break;
          
         }
      }
   }
Ni++;
}
 
   printf("\n\n");
 
 
printf ("labyrint posle algoritma:: \n \n");
for (i=0; i < size_row; i++)
{
   for (j=0; j < size_col; j++)
   printf("%d\t", R[i][j]);
}
 
   getch();
   return 0;
}
это обход конем по шахматной доске.к нему нужно прилепить следующее:
-размеры шахматной доски.
-координаты конечного поля.
как это воплотить в жизнь?

Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.01.2013, 23:27     Добавить размеры в код "Обход конем"
Посмотрите здесь:

Задача "Тур конем" - C++
На шахматной доске размером на поле с координатами х0, у0 находится конь – фигура, перемещающаяся по обычным шахматным правилам. Задача...

"Рекурсивная функция" (Обход бинарного дерева) - C++
Привет всем, встретился с такой рекурсивной ф-ей, которая обходит бинарное дерево и выводит его на экран. Не могу понять как она работает ...

Обход "End Of File". Работа с файлами - C++
Доброе утро всем! Вопрос таков: Делаю копирование из одного файла в другой, копирование по-символьное, до того как переменная не будет...

предлагаю людям класс "рекурсивный обход матрицы" для решения задач на такую тематику - C++
Друзья! Ввиду возникшей необходимости мной был написан класс &quot;рекурсивный обход матрицы&quot;; Теперь задачи на такую тематику будут решаться...

Обход доски конем - C++
Дана шахматная доска размером 8х8 и шахматный конь. Программа должна запросить у пользователя координаты клетки поля и поставить туда коня....

Обход доски шахматным конем - C++
решал задачу &quot;Тур конем&quot;. : На шахматной доске размером n*n на поле с координатами x0,y0 находится конь - фигура , перемещающаяся по...

Переписать визуальный проект в консольное приложение: Обход конем всех клеток шахматного поля. - C++
Приветствую друзья!Прошу помощи у экспертов, т.к. ООП почти не изучал. Дана программа с исходниками и исполняемым файлом, рабочая, но с...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Катерька
0 / 0 / 0
Регистрация: 07.01.2013
Сообщений: 32
21.01.2013, 00:26  [ТС]     Добавить размеры в код "Обход конем" #2
кто-то это читал вообще?
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
21.01.2013, 01:24     Добавить размеры в код "Обход конем" #3
Цитата Сообщение от Катерька Посмотреть сообщение
кто-то это читал вообще?
Кто-нибудь наверняка читал.

Цитата Сообщение от Катерька Посмотреть сообщение
-координаты конечного поля.
Вам нужен алгоритм с конечным полем, равным начальному или наоборот, все равно, какое конечное поле?
Заметьте, я сформулировал вопрос таким образом, чтобы на него можно было дать только развернутый ответ.

Добавлено через 22 минуты
Код взят из этой темы.
Напишите свое задание целиком.
Катерька
0 / 0 / 0
Регистрация: 07.01.2013
Сообщений: 32
21.01.2013, 01:34  [ТС]     Добавить размеры в код "Обход конем" #4
lemegeton, да,код взят,я спросила разрешения у владельца,если вдруг что

Отвечаю:размеры начального поля -8X8,должны быть загружены в программе.
Я дура.Мозги поплыли совсем...НАЧАЛЬНОЕ,НАЧАЛЬНОЕ ТАМ ПОЛЕ нужно,а не конечное...То есть размеры доски+координаты исходного поля(я так понимаю,это координаты коня?..) программа должна выписать наименьшие пути на все поля,при чем конь выходит каждый раз из исходного поля...фуууух.так вот.сильно дура.Простите...можно с этим помочь?
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
21.01.2013, 01:45     Добавить размеры в код "Обход конем" #5
Цитата Сообщение от Катерька Посмотреть сообщение
программа должна выписать наименьшие пути на все поля
Неслабо.

Задание, пожалуйста. Целиком. На русском языке.
Катерька
0 / 0 / 0
Регистрация: 07.01.2013
Сообщений: 32
21.01.2013, 02:43  [ТС]     Добавить размеры в код "Обход конем" #6
Написала же?
перевожу с бусурманского слово в слово:
Программа загрузит из консоли размеры шахматной доски(напр. 8 на 8) и координаты исходного поля.На выходе программа выпишет "длины кратчайших путей"(по-русски удобнее видимо кратчайшие пути) коня по этой шахматной доски на все поля, причем конь всегда стартует из исходного поля.
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
21.01.2013, 02:50     Добавить размеры в код "Обход конем" #7

Не по теме:

Цитата Сообщение от Катерька Посмотреть сообщение
причем конь всегда стартует из исходного поля
Атомная бомба всегда попадает в эпицентр ядерного взрыва.



Когнитивный диссонанс вызвал следующий ваш пассаж.
Цитата Сообщение от Катерька Посмотреть сообщение
это обход конем по шахматной доске
Хотя в коде волновой алгоритм поиска кратчайшего пути от одной точки до другой. Это совершенно разные задачи.

Такой задачей наказывают.

Тут нужен алгоритм Дийкстры с созданием матрицы смежности или что-нибудь более прикольное.
Очень муторно, не думаю, что я возьмусь это делать, слишком много моего времени уйдет. Может кто-нибудь еще поможет, но шансов мало. Действительно очень муторная задача.
ya_noob
_
201 / 145 / 9
Регистрация: 08.10.2011
Сообщений: 432
21.01.2013, 17:26     Добавить размеры в код "Обход конем" #8
Оно?

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
#include <iostream>
#include <iomanip>
#include <queue>
 
using namespace std;
 
void step1( int &i, int &j ) { i -= 2; j += 1; }
void step2( int &i, int &j ) { i -= 1; j += 2; }
void step3( int &i, int &j ) { i += 1; j += 2; }
void step4( int &i, int &j ) { i += 2; j += 1; }
void step5( int &i, int &j ) { i += 2; j -= 1; }
void step6( int &i, int &j ) { i += 1; j -= 2; }
void step7( int &i, int &j ) { i -= 1; j -= 2; }
void step8( int &i, int &j ) { i -= 2; j -= 1; }
 
struct Three
{
    Three( int x, int y, int z ) : i( x ), j( y ), n( z ) {}
 
    int i;
    int j;
    int n;
};
 
void bypass( int i, int j, int **s, const int N, const int M )
{
    queue< Three > q;
    void ( *step[ 8 ] )( int &, int & ) = { step1, step2, step3, step4, step5, step6, step7, step8 };
    Three t( i, j, 0 );
 
    q.push( t );
    while ( !q.empty() )
    {
        t = q.front(); q.pop();
        if ( s[ t.i ][ t.j ] != -1 ) continue;
        s[ t.i ][ t.j ] = t.n;
        for ( int k = 0, r, c; k < 8; ++k )
        {
            r = t.i; c = t.j; ( step[ k ] )( r, c );
            if ( r >= 0 && r < N && c >= 0 && c < M && ( s[ r ][ c ] == -1 ) )
                q.push( Three( r, c, t.n + 1 ) );
        }
    }
}
 
int main()
{
    const int N = 8; // высота доски
    const int M = 8; // ширина доски
    const int row = 0; // начальная горизонталь коня
    const int col = 0; // начальная вертикаль коня
    int **s = new int * [ N ]; // таблица длин путей
 
    for ( int i = 0; i < N; ++i )
    {
        s[ i ] = new int [ M ];
        for ( int j = 0; j < M; ++j )
            s[ i ][ j ] = -1;
    }
 
    bypass( row, col, s, N, M );
 
    for ( int i = 0; i < N; ++i )
    {
        for ( int j = 0; j < M; ++j )
            cout << setw( 3 ) << s[ i ][ j ];
        cout << endl;
    }
 
    return 0;
}
Катерька
0 / 0 / 0
Регистрация: 07.01.2013
Сообщений: 32
21.01.2013, 17:35  [ТС]     Добавить размеры в код "Обход конем" #9
дорогой lemegeton, с подозрениями на приступы когнитивного диссонанса сидеть на таких форумах не представляется полезным.вернемся к первому посту.там было сказано,что нужно добавить размеры и координаты.в существующий код.я лишь хотела попросить помощи с этим,мне не нужно ломать существующую программу и переписывать ее.

Добавлено через 1 минуту
ya_noob, компилятор сразу вылетает,таблица появляется на долю секунды и пропадает...я могу попробовать послать это преподавателю..выглядит круто)спасибо)
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
21.01.2013, 17:36     Добавить размеры в код "Обход конем" #10
Цитата Сообщение от Катерька Посмотреть сообщение
мне не нужно ломать существующую программу и переписывать ее
Не выйдет.
ya_noob
_
201 / 145 / 9
Регистрация: 08.10.2011
Сообщений: 432
21.01.2013, 17:40     Добавить размеры в код "Обход конем" #11
ну добавь перед return 0 следующее:
C++
1
system( "pause" );
а сверху допиши
C++
1
#include <cstdlib>
и будет тебе счастье
Катерька
0 / 0 / 0
Регистрация: 07.01.2013
Сообщений: 32
21.01.2013, 17:56  [ТС]     Добавить размеры в код "Обход конем" #12
ya_noob, послала,жду ответа.
ya_noob
_
201 / 145 / 9
Регистрация: 08.10.2011
Сообщений: 432
21.01.2013, 18:04     Добавить размеры в код "Обход конем" #13
Было бы гораздо лучше, если бы вы вначали разобрались с тем, что делает программа
Катерька
0 / 0 / 0
Регистрация: 07.01.2013
Сообщений: 32
21.01.2013, 20:58  [ТС]     Добавить размеры в код "Обход конем" #14
ya_noob, я прочла закомментированные строчки и увидела конечную таблицу,которая,в принципе,соответсвтует логике.Если программа будет одобрена,мне так или иначе придется понять ,как она работает.так что это еще предстоит.

Добавлено через 2 часа 37 минут
ya_noob, ответил то же самое,что и на первый код.что программа должна загружать из консоли размеры доски и координаты исходного поля.Я ЧТО-ТО НЕ ПОНЯЛА,там же оно есть?
ya_noob
_
201 / 145 / 9
Регистрация: 08.10.2011
Сообщений: 432
21.01.2013, 21:12     Добавить размеры в код "Обход конем" #15
в моей программе те переменные, которые вас просят ввести с консоли, уже инициализированны. надо просто добавить код для их ввода из консоли.

это ж элементарно! напряги извилины!!!
Катерька
0 / 0 / 0
Регистрация: 07.01.2013
Сообщений: 32
22.01.2013, 00:49  [ТС]     Добавить размеры в код "Обход конем" #16
ya_noob,
C
1
2
3
4
      printf("тут размеры доски по вертикали%d\n",row );
   printf("размеры по горизонтали %d\n",col );
      printf("координаты по горизонтали %d\n",N );
           printf("коорлинаты по вертикали %d\n",M );
типа этого что ли?после того,как переменные будут введены

Добавлено через 3 часа 1 минуту
так да или нет?

и второй вопрос.
ya_noob, мне надо все это в си ,можно аналогии провести между строками типа
C
1
2
3
4
5
6
7
8
 bypass( int i, int j, int **s, const int N, const int M )
{
    queue< Three > q;
    void ( *step[ 8 ] )( int &, int & ) = { step1, step2, step3, step4, step5, step6, step7, step8 };
    Three t( i, j, 0 );
 
    q.push( t );
    while ( !q.empty() )
в с++ и чем-то похожим в си?
ya_noob
_
201 / 145 / 9
Регистрация: 08.10.2011
Сообщений: 432
22.01.2013, 09:01     Добавить размеры в код "Обход конем" #17
Цитата Сообщение от Катерька Посмотреть сообщение
printf("тут размеры доски по вертикали%d\n",row );
printf("размеры по горизонтали %d\n",col );
printf("координаты по горизонтали %d\n",N );
printf("коорлинаты по вертикали %d\n",M );
типа этого что ли?после того,как переменные будут введены
Типа того.

В Си я не очень хорошо разбираюсь. Там вроде нет библиотечных реализаций queue, со структурой могут возникнуть проблемы, ну и ввод/вывод другой
Катерька
0 / 0 / 0
Регистрация: 07.01.2013
Сообщений: 32
23.01.2013, 21:51  [ТС]     Добавить размеры в код "Обход конем" #18
это на самом деле беда.потому что в с++ его нельзя сдавать.. ввод-вывод переделать не проблема,а вот очередь queue...тут по ссылочке вроде как не только пишут можно его на с++ использовать
http://msdn.microsoft.com/ru-ru/library/055sfc3z.aspx

Добавлено через 59 секунд
ya_noob, вот что еще нарыпала
с форума про вопрос об очереди на Си.

"Ну тогда как написал делать надо. Берешь список связанный, 2 указателя -- голова и хвост. При добавлении элемента в очередь -- добавляешь его в голову, при доставании -- берешь с конца."

Добавлено через 23 часа 30 минут
Препод вообще посоветовал следующее: "хватит и динамическего массива,который представляет шахматную доску"

Добавлено через 9 минут
уфф.если можно ссылку,на что-то связанное с массивом и с конем.и с щахматами.я возможно неправильно перевела,на родном языке это звучит как dynamicky alokovane pole.
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
23.01.2013, 21:58     Добавить размеры в код "Обход конем" #19
очередь тут для удобства

Добавлено через 37 секунд
хватит и пары массивов конечно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2013, 22:51     Добавить размеры в код "Обход конем"
Еще ссылки по теме:

Изъять комментарии и добавить вместо них символ "пробел" - C++
В языке паскаль комментарии записываются в фигурных скобках: begin {начало цикла } i:=i+1;{ увеличиваем i на 1} Написать программу на...

Добавить целое число в очередь с помощью "operator <<" - C++
В общем, прочитал я статьи про очереди. Где делается с помощью конструктора,деструктора,массивов. Вот только, у меня одна загвоздка. В...

Добавить в класс "Односвязный список" следующие функции - C++
1. Добавить в класс &quot;Односвязный список&quot; следующие функции: вставка элемента в заданную позицию, удаление элемента по заданной позиции,...

Добавить "xxx" перед последним словом строки - C++
#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main(void) { char s; char sr; printf(&quot;BBeduTe...

Добавить в конец программы строчку cout << "Your number is", не задев цикл - C++
Здравстуйте! Подскажите, пожалуйста, как добавить в конец программы cout &lt;&lt; &quot;Your number is&quot; не задев цикл. #include &lt;iostream&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Катерька
0 / 0 / 0
Регистрация: 07.01.2013
Сообщений: 32
23.01.2013, 22:51  [ТС]     Добавить размеры в код "Обход конем" #20
UserAK, мне не так много осталось до окончания срока сдачи,можно ссылочку какую-то?я гуглила уже очень много,везде есть какие-то свои ньюансы.вы же лучше понимаете,о чем речь..я не могу просить вас написать за меня программу,хотя здесь люди выкладывали код,за это им огромное спасибо.
Yandex
Объявления
23.01.2013, 22:51     Добавить размеры в код "Обход конем"
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru