Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 14.01.2012
Сообщений: 6
1

Использование переборных методов

10.03.2012, 17:16. Показов 1039. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребят! Помогите решить задачу!! Использование переборных методов разработка программы нахождения кратчайшего пути передвижения различных шахматных фигур по доске(ферзь,конь,король) соединяюшей два заданных поля шахматной доски
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2012, 17:16
Ответы с готовыми решениями:

Ханойская башня (использование переборных методов)
Использование переборных методов (разработка программ решения задачи «Ханойская башня»). на С++

Использование static методов
Здравствуйте ,у меня есть код для очереди ,но мне хочется ,чтобы функции работали без создания...

Использование шаблоных методов
Есть код: class A { public: static void Set( unsigned param ) { ...

Использование рекурсивных методов
Потрібен приклади використання рекурсивних методів / надо примеры использование рекурсивных методов...

3
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
10.03.2012, 22:29 2
Метод перебора будет не ээфективным здесь. Могу предложить другой метод, по-моему волновой алгоритм называется. Объясню его "на пальцах":
берем матрицу a[8][8]. Все элементы делаем равными -1. Затем конечную клетку где стоит фигура помечаем 0, заносим координаты этой клетки в очередь.
Далее делаем так:
Берем очередной элемент из очереди и смотрим куда из этой клетки можем пойти фигурой. Если есть клетка в которую мы можем пойти и она не помечена (равна -1), то заносим ее в очередь и помечаем значением на 1 больше чем значение у текущей точки.
По окончании очереди если значение начальной клетки осталось равным -1, то клетка не достижима. Если не равна -1, то достижима за кол-во ходов, которое записано в этой клетке.
Теперь сам кратчайший путь:
Начинаем с начальной клетки, ищем клетку в которую можно попасть этой фигурой со значением на 1 меньше. Переходим на нее, из нее делаем тоже самое. И т.д. пока не попадем в клетку со значением 0.
1
0 / 0 / 0
Регистрация: 14.01.2012
Сообщений: 6
11.03.2012, 07:27  [ТС] 3
Извиняюсь! можно код программы просто я не очень в нём понимаю!
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
11.03.2012, 18:38 4
Цитата Сообщение от Corsair342 Посмотреть сообщение
Извиняюсь! можно код программы просто я не очень в нём понимаю!
Это пример для вычисления кратчайшего пути коня (вводите координаты начала и конца пути от 1 до 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
72
73
74
75
76
77
78
79
#include <stdio.h>
    struct tt{
        int x, y;
    };
int main()
{
 
    int a[8][8], i, j, i_st=0, i_end=1, x_st, y_st, x_end, y_end;
    tt Q[64];
    for(i=0; i<8; i++)
        for(j=0; j<8; j++)
            a[i][j]=-1;
    printf("Vvod koordinati starta:\nX= ");
    scanf("%d", &x_st);
    printf("Y= ");
    scanf("%d", &y_st);
    printf("Vvod koordinati finish:\nX= ");
    scanf("%d", &x_end);
    printf("Y= ");
    scanf("%d", &y_end);
    x_st--; y_st--; x_end--; y_end--;
    a[x_end][y_end]=0; Q[0].x=x_end; Q[0].y=y_end;
    while(i_st<i_end)
    {
        if(Q[i_st].x>1 && Q[i_st].y>0 && a[Q[i_st].x-2][Q[i_st].y-1]==-1)
        { a[Q[i_st].x-2][Q[i_st].y-1]=a[Q[i_st].x][Q[i_st].y]+1; Q[i_end].x=Q[i_st].x-2; Q[i_end++].y=Q[i_st].y-1;}
        if(Q[i_st].x>1 && Q[i_st].y<7 && a[Q[i_st].x-2][Q[i_st].y+1]==-1)
        { a[Q[i_st].x-2][Q[i_st].y+1]=a[Q[i_st].x][Q[i_st].y]+1; Q[i_end].x=Q[i_st].x-2; Q[i_end++].y=Q[i_st].y+1;}
        if(Q[i_st].x>0 && Q[i_st].y>1 && a[Q[i_st].x-1][Q[i_st].y-2]==-1)
        { a[Q[i_st].x-1][Q[i_st].y-2]=a[Q[i_st].x][Q[i_st].y]+1; Q[i_end].x=Q[i_st].x-1; Q[i_end++].y=Q[i_st].y-2;}     
        if(Q[i_st].x>0 && Q[i_st].y<6 && a[Q[i_st].x-1][Q[i_st].y+2]==-1)
        { a[Q[i_st].x-1][Q[i_st].y+2]=a[Q[i_st].x][Q[i_st].y]+1; Q[i_end].x=Q[i_st].x-1; Q[i_end++].y=Q[i_st].y+2;}
        if(Q[i_st].x<6 && Q[i_st].y>0 && a[Q[i_st].x+2][Q[i_st].y-1]==-1)
        { a[Q[i_st].x+2][Q[i_st].y-1]=a[Q[i_st].x][Q[i_st].y]+1; Q[i_end].x=Q[i_st].x+2; Q[i_end++].y=Q[i_st].y-1;}
        if(Q[i_st].x<6 && Q[i_st].y<7 && a[Q[i_st].x+2][Q[i_st].y+1]==-1)
        { a[Q[i_st].x+2][Q[i_st].y+1]=a[Q[i_st].x][Q[i_st].y]+1; Q[i_end].x=Q[i_st].x+2; Q[i_end++].y=Q[i_st].y+1;}
        if(Q[i_st].x<7 && Q[i_st].y>1 && a[Q[i_st].x+1][Q[i_st].y-2]==-1)
        { a[Q[i_st].x+1][Q[i_st].y-2]=a[Q[i_st].x][Q[i_st].y]+1; Q[i_end].x=Q[i_st].x+1; Q[i_end++].y=Q[i_st].y-2;}
        if(Q[i_st].x<7 && Q[i_st].y<6 && a[Q[i_st].x+1][Q[i_st].y+2]==-1)
        { a[Q[i_st].x+1][Q[i_st].y+2]=a[Q[i_st].x][Q[i_st].y]+1; Q[i_end].x=Q[i_st].x+1; Q[i_end++].y=Q[i_st].y+2;}     
        i_st++;
    }
    if(a[x_st][y_st]==-1)
        printf("Nedostogaem pole");
    else
    {
        printf("Put':\n");
         do 
        {
            printf("%d %d\n", x_st+1, y_st+1);
            if(x_st>1 && y_st>0 && a[x_st-2][y_st-1]==a[x_st][y_st]-1)
            { x_st-=2; y_st--;}
            else
            if(x_st>1 && y_st<7 && a[x_st-2][y_st+1]==a[x_st][y_st]-1)
            { x_st-=2; y_st++;}
            else
            if(x_st>0 && y_st>1 && a[x_st-1][y_st-2]==a[x_st][y_st]-1)
            { x_st--; y_st-=2;}
            else
            if(x_st>0 && y_st<6 && a[x_st-1][y_st+2]==a[x_st][y_st]-1)
            { x_st--; y_st+=2;}
            else
            if(x_st<6 && y_st>0 && a[x_st+2][y_st-1]==a[x_st][y_st]-1)
            { x_st+=2; y_st--;}
            else
            if(x_st<6 && y_st<7 && a[x_st+2][y_st+1]==a[x_st][y_st]-1)
            { x_st+=2; y_st++;}
            else
            if(x_st<7 && y_st>1 && a[x_st+1][y_st-2]==a[x_st][y_st]-1)
            { x_st++; y_st-=2;}
            else
            if(x_st<7 && y_st<6 && a[x_st+1][y_st+2]==a[x_st][y_st]-1)
            { x_st++; y_st+=2;}
        }while(a[x_st][y_st]>0);
        printf("%d %d\n", x_end+1, y_end+1);
    }
    return 0;
 
}
0
11.03.2012, 18:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.03.2012, 18:38
Помогаю со студенческими работами здесь

Использование методов класса в самом классе
Вообще есть класс нужно объедение все его методы в один метод. Пример: class Test{ public:...

Использование полей и методов в дочерних классах
Возникла проблема class Subj { public: char name; char prepod; int hours; ...

Использование массивов внутри методов класса
Нужно сделать так, чтобы массив NextBrick можно было использовать в ShowNB. При этом Массив...

Использование статических методов класса в динамических библиотеках
Здравствуйте. Прочитав пару тредов, статтей, да поклацав в компилятор у меня получилось слинковать...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru