Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
ololololo
0 / 0 / 0
Регистрация: 25.03.2012
Сообщений: 15
1

Лабиринт на основе метода перебора с возвратом

15.06.2012, 13:34. Просмотров 1281. Ответов 1
Метки нет (Все метки)

1) Разработать на основе массива символьных данных M[1..11,1..11] информационную модель лабиринта с тремя выходами. Стены лабиринта обозначать символом ‘H’, а проходы –символом пробел ‘ ‘. Перемещения объекта по лабиринту помечать символом ‘*’.
2) На основе метода перебора с возвратом разработать программу поиска выхода из лабиринта для объекта, размещенного в заданной начальной точке лабиринта. В алгоритме поиска использовать просмотр возможных направлений по часовой стрелке.
3) На основе предыдущей программы. разработать программу в которой обеспечить просмотр возможных направлений перемещения против часовой стрелки.

Вот пример:
0
Миниатюры
Лабиринт на основе метода перебора с возвратом  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2012, 13:34
Ответы с готовыми решениями:

Решить задачу методом рекурсивного перебора с возвратом
В Волшебной стране используются монетки достоинством A1, A2,..., AM. Волшебный...

Разработка приложения реализующего задачу перебора с возвратом
Задание для курсовой: Разработка приложения реализующего задачу перебора с...

Вызов метода с возвратом значения
Есть метод: +(NSString*)outputString:(NSString*)inputString { ...

С помощью нерекурсивного перебора с возвратом найти гамильтонов цикл в графе, заданном с помощью матрицы смежности.
using System; using System.Collections.Generic; using System.ComponentModel;...

Создание таблицы на основе перебора значений из других таблиц
Добрый день, уважаемые посетители форма. Прошу помощи в решении следующего...

1
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
16.06.2012, 02:25 2
Лучший ответ Сообщение было отмечено ololololo как решение

Решение

Вот типа того: Это, кажется, перебор с возвратом и выбор направления по часовой стрелке:
Delphi
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
program Project2;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
Type
  TLabirint = Array[1..11] Of String[11];
Var
  M : TLabirint =
     ('HHHHHH HHHH',
      'HHH       H',
      'HHH HHHHHHH',
      'HHH HH   HH',
      'HHH HHHH   ',
      'HH  HH   HH',
      'HH       HH',
      'HH HHHHH  H',
      'HHHHHHHHH H',
      'HH        H',
      'HH HHHHHHHH');
 
Procedure WriteLab(a:TLabirint);
Var
  i : Integer;
Begin
  WriteLn;
  For i:=1 To 11 Do
  WriteLn(a[i]);
End;
 
Procedure Move(a:TLabirint;x,y:Integer);
Begin
  If a[x][y]=' ' Then
  Begin
    a[x][y]:='*';
    If ((x=1) Or (x=11) Or (y=1) Or (y=11)) Then
    WriteLab(a) Else
    Begin
      Move(a,x,y+1); //   ->
      Move(a,x+1,y); //  вниз
      Move(a,x,y-1); //   <-
      Move(a,x-1,y); //   вверх 
    End;
    a[x][y]:=' ';
  End;
End;
 
begin
  Move(M,6,3);
  ReadLn;
end.
Думаю дальше.

Добавлено через 25 минут
А тут можно задавать позицию и направление обхода:
Delphi
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
program Project2;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils, Windows;
 
Type
  TLabirint = Array[1..11] Of String[11];
Var
  M : TLabirint =
     ('HHHHHH HHHH',
      'HHH       H',
      'HHH HHHHHHH',
      'HHH HH   HH',
      'HHH HHHH   ',
      'HH  HH   HH',
      'HH       HH',
      'HH HHHHH  H',
      'HHHHHHHHH H',
      'HH        H',
      'HH HHHHHHHH');
 
Procedure WriteLab(a:TLabirint);
Var
  i : Integer;
Begin
  WriteLn;
  For i:=1 To 11 Do
  WriteLn(a[i]);
End;
 
Procedure Move(a:TLabirint;x,y,n:Integer);
Begin
  If a[x][y]=' ' Then
  Begin
    a[x][y]:='*';
    If ((x=1) Or (x=11) Or (y=1) Or (y=11)) Then
    WriteLab(a) Else
    If n=0 Then
    Begin
      Move(a,x,y+1,n);  //   ->
      Move(a,x+1,y,n);  //  вниз
      Move(a,x,y-1,n);  //   <-
      Move(a,x-1,y,n);  //  вверх
    End Else
    Begin
      Move(a,x-1,y,n);  //  вверх
      Move(a,x,y-1,n);  //   <-
      Move(a,x+1,y,n);  //  вниз
      Move(a,x,y+1,n);  //   ->
    End;
    a[x][y]:=' ';
  End;
End;
 
Var
  x0,y0,no : Integer;
begin
  //Русский текст в консоли...
  //Установить в свойствах щрифт   Lucida Console
  SetConsoleCP(1251);
  SetConsoleOutPutCP(1251);
 
  WriteLn('Задайте координаты начальной позиции [строка столбец]: ');
  Repeat
    ReadLn(x0,y0);
    If ((x0>=1) And (x0<12) And (y0>=1) And (y0<12)) Then
    If (M[x0][y0]=' ') Then Break Else
    WriteLn('Позиция занята.') Else
    WriteLn('Выход за пределы лабиринта.');
    WriteLn('Выберите другую позицию');
    WriteLn;
  Until False;
 
  WriteLn;
  WriteLn('Задайте направление обхода.');
  WriteLn('0 - по часовой стрелке, не 0 - против часовой стрелки:');
  ReadLn(no);
 
  Move(M,x0,y0,no);
  ReadLn;
end.
Лучше уже сегодня ничего не придумаю.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2012, 02:25

Разработать программу планирования пути робота на основе алгоритма полного перебора
Разработать программу планирования пути робота на основе алгоритма полного...

Функция с возвратом указателя и возвратом ссылки
Найти максимальный и минимальный элемент в двумерном массиве и указать их...

Классификатор спама на основе Метода Фишера
Здраствуйте, нужно мне нужно сделать классификатор спама на основе Метода...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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