Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/30: Рейтинг темы: голосов - 30, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 25

Программа поиска пути в лабиринте

21.04.2009, 19:08. Показов 6221. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Задали в универе написать программу на Билдере, которая бы искала путь в лабиринте. Лабиринт может задаваться как интерактивно, так и загружаться из файла. Лабиринт задается через StringGrid (можно задавать проходы 0, а стены 1). Я только начал изучение Билдера, поэтому многого не понимаю. Пока моих способностей хватило только чтобы компонентов навставлять и задавать лабиринт интерактивно. Вот моё начало, может кто дальше поможет:

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
#include <vcl.h>
#pragma hdrstop
 
#include "Unit7.h"
 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
StringGrid1->FixedRows = 0;
StringGrid1->FixedCols = 0;
StringGrid1->RowCount = StrToInt(Edit1->Text);
StringGrid1->ColCount = StrToInt(Edit2->Text);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect)
{
StringGrid1->Cells[ACol][ARow]=Edit3->Text;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::StringGrid1DblClick(TObject *Sender)
{
StringGrid1->RowCount = StrToInt(Edit1->Text);
StringGrid1->ColCount = StrToInt(Edit2->Text);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
}
//---------------------------------------------------------------------------
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.04.2009, 19:08
Ответы с готовыми решениями:

Алгоритм поиска пути A*
использую библиотеку SFML только для окна пытался сделать алгоритм поиска пути от одной до другой точки(левая и правая кнопка мыши) окно...

Алгоритм Кегелеса-Рауера для поиска кратчайшего пути
Здравствуйте, пару дней назад реализовал алгоритм Кегелеса-Рауера для поиска кратчайшего пути. Сегодня решил внедрить его в игру и...

Написать теорию для алгоритма нахождения пути в лабиринте
кто может помочь мне написать на самую скушную тему нахожденния пути в лабиринте теорию или найти (надо очень много ) плиз отпишыте

32
 Аватар для Toxa33rus
3917 / 918 / 125
Регистрация: 16.04.2009
Сообщений: 1,941
21.04.2009, 20:28
Если вход и выход из лабиринта находится по периметру (не внутри - аля телепорт), то можно идти по любой стене и когда-нибудь придешь к выходу. Т.е. условно хватаешься левой рукой за стену и идешь не отпуская ее.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
21.04.2009, 20:47
Цитата Сообщение от Toxa33rus Посмотреть сообщение
Если вход и выход из лабиринта находится по периметру (не внутри - аля телепорт), то можно идти по любой стене и когда-нибудь придешь к выходу. Т.е. условно хватаешься левой рукой за стену и идешь не отпуская ее.
Необязательно попадёшь к выходу. Можешь пройти по кругу и вернуться обратно
0
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 25
22.04.2009, 15:20  [ТС]
А почему мне например Билдер не позволяет написать следующее:

C++
1
2
3
4
5
6
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for (int j=0; j<StringGrid1->ColCount; j++)
        for (int i=0; i<StringGrid1->RowCount; i++)
              if (StringGrid1->Cells[j][i]==0) then StringGrid1->Cells[j][i]=1;
}
а он мне указывает на строчку:
C++
1
if (StringGrid1->Cells[j][i]==0) then StringGrid1->Cells[j][i]=1;
и говорит что не понимает что такое i и j. Что я делаю неправильно?
0
 Аватар для Jazon_deenAlt
4117 / 999 / 191
Регистрация: 09.04.2009
Сообщений: 4,223
22.04.2009, 15:40
Хз поможет ли опишу возможный алгоритм... карочь представь себе матрицу Н*М(число к) елементов. Пусть значение ячеек: 0-стена, 1-проход, 2-начало откуда пойдем, Н*М-конечный пункт. Например мы рандомно задали стены/проходы и получили некую матрицу:
01010
01001
10100
01010
10101
терь зададим начало и конец, получим:
21010
01001
10100
01010
10к01
терь тыцаем найтить путь, оно ищет путь по принцыпу "а куда мне можно пойтить?" туда куда можно пишем значение "3" получим после первого перерисова:
23010
03001
10100
01010
10к01
терь цыклим до победной с точки 3 к "к" с шагом +1 получим:
23010
03001
40400
05050
60к06
Надо бы теперь ввести такое что бы следующий шаг при натолкнении на меньшый результат и невозможности куда-то пойти стирал себя:
2*010
03001
40400
05050
*0к0*
Итог рисуем путь от 2 к "к":
2*010
0-001
-0-00
0-0-0
*0к0*
ето есть волновой алгоритм поиска пути... в простом виде)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
22.04.2009, 16:47
Цитата Сообщение от Victor35 Посмотреть сообщение
А почему мне например Билдер не позволяет написать следующее:
Видимо, всё очень плохо...
После второй втроки вставь "int i, j;"
0
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 25
23.04.2009, 22:20  [ТС]
А зачем? У меня же в циклах for указано, что i и j являются int.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
23.04.2009, 22:22
Цитата Сообщение от Victor35 Посмотреть сообщение
А зачем? У меня же в циклах for указано, что i и j являются int.
Что-то я невнимательно посмотрел - пойду убивать себя об стену
Напиши, что компилятор выдаёт
0
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 25
25.04.2009, 20:25  [ТС]
Он пишет, что неизвестный символ THEN и что он ожидает точку с запятой в этом месте (ну то есть где then написано)
0
43 / 39 / 12
Регистрация: 05.01.2009
Сообщений: 394
25.04.2009, 21:28
then - нету в c++ такого ключевого слова
0
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 25
27.04.2009, 23:01  [ТС]
Цитата Сообщение от Фенрир Посмотреть сообщение
then - нету в c++ такого ключевого слова
А! Точно! Спасибо! Никто не натыкался на реализацию волнового алгоритма на каком нибудь языке? Если да, то пришлите ссылку пожалуйста.
0
 Аватар для Jazon_deenAlt
4117 / 999 / 191
Регистрация: 09.04.2009
Сообщений: 4,223
29.04.2009, 09:47
вот она! и заметте далеко идти не надо) Клеточная карта
0
 Аватар для BOR1K
14 / 14 / 3
Регистрация: 19.09.2009
Сообщений: 289
27.01.2010, 14:01
Надо поднять тему. На форуме еще нет решения лабиринта(
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
27.01.2010, 14:15
Ищи алгоритмы "перебор в ширину", "перебор в глубину", "полный перебор". Любым алгоритмом перебора ты выход найдёшь
0
 Аватар для BOR1K
14 / 14 / 3
Регистрация: 19.09.2009
Сообщений: 289
27.01.2010, 15:12
Не, сейчас актуален волновой алгоритм.(Алгоритм Ли)
0
6 / 6 / 0
Регистрация: 31.12.2009
Сообщений: 132
27.01.2010, 17:18
ловіть))))))))))))))))))))))))
//---------------------------------------------------------------------------

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
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int kil;
typedef int dr[100][100];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void find(dr m, int x,int y,int r,int s)
{
if ((x==s-1) && (y==r-1))
    kil++;
    else
    {
    if (y+1<r)
        if (m[y+1][x]==1)
           find(m,x,y+1,r,s);
    if (x+1<s)
        if (m[y][x+1]==1)
           find(m,x+1,y,r,s);
    }
}
 
void __fastcall TForm1::CSpinEdit1Change(TObject *Sender)
{
table->ColCount=CSpinEdit1->Value;
Button1->Click() ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CSpinEdit2Change(TObject *Sender)
{
table->RowCount=CSpinEdit2->Value;
Button1->Click() ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N1Click(TObject *Sender)
{
int i,j,r=CSpinEdit1->Value, s=CSpinEdit2->Value;
dr dr1;
kil=0;
for (i=0;i<s;i++)
 for (j=0;j<r;j++)
     dr1[i][j]=StrToInt(table->Cells[j][i]);
find(dr1,0,0,s,r);
Edit1->Text="Кількість можливих шляхів = "+IntToStr(kil);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for (int i=0;i<table->ColCount ;i++)
for (int j=0;j<table->ColCount ;j++)
table->Cells [i][j]="0";
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Form1->Close() ;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Button1->Click() ;
}
//---------------------------------------------------------------------------
Добавлено через 2 минуты
путь задается 1ми =))))))))))))
table - StringGrid

Добавлено через 27 секунд
Рекурсия - это вещь))))))))
0
 Аватар для BOR1K
14 / 14 / 3
Регистрация: 19.09.2009
Сообщений: 289
27.01.2010, 19:15
А слабо сделать без формы? т.е. в консоли к примеру, 1- стены, 0 путь, 2 начальная точка,3 конечная, я в свое время делал) тока кода нет(
0
6 / 6 / 0
Регистрация: 31.12.2009
Сообщений: 132
27.01.2010, 19:32
в чем проблемма????
вместо стрынггрида - масив int table[][];
у меня начало лабиринту в [0][0], конец в правом нижнем углу, если кто не понял..

у меня такое впечетление что ты BOR1K вообще не писал такую программу, так как твой вопрос - свидетельствует об этом!!!!
"а без формы слабо" - БУГАГА)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
27.01.2010, 20:19
22dr22, скорее всего он имел в виду то, что твою программу без доработки напильником не запустить. Вот когда можно взять код и тупо его скомпилять - это одно. А когда надо плясать с бубном и разбираться, как твою программу повторить у себя - другое. Лично меня совершенно ломает что-то делать с твоей программой
0
6 / 6 / 0
Регистрация: 31.12.2009
Сообщений: 132
27.01.2010, 20:26
=))))))
find - ф-я поиск
просит матрицу(лабиринт) координати начала и конца =))))

код то мелкий, 1,5 экрана =))))

да ты прав надо было спросить ТЗ - написать и скинуть проэкт за спасибо =)))))

я кинул пример - тот кому нужен - поймет и свой напишет, а для халявщиков я делать не буду =))))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.01.2010, 20:26
Помогаю со студенческими работами здесь

Алгоритм поиска пути в лабиринте
159 ошибок помогите разобраться #include &quot;conio.h&quot; // Для функции getch() #include &lt;string.h&gt; struct screen_point{ // ...

алгоритм поиска кротчайшего пути в лабиринте
суть в том, чтобы найти кротчайший путь в лабиринте, организованном в StringGrind случайным образом вообще ума не приложу, как можно...

Реализация волнового алгоритма поиска пути в лабиринте
Люди прошу помощи бьюсь над этой фигнёй уже 3 недели. На форуме впервые прошу не ругать за корявость. ошибка в сегменте Repeat ...

Разработать программу для поиска пути в лабиринте
Здравствуйте! Помогите, пожалуйста​, разработать программу для поиска пути в лабиринте на лиспе. Предусмотреть возможность задания входа и...

Алгоритм поиска пути в лабиринте, заданном связным графом
использовать алгоритм поиска пути в лабиринте, заданном связным графом. граф уже задан в самой программе. Пример: int mas = {...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru