Форум: Форум C++Разное
Новые темы: 00
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Поиск кратчайшего пути в лабиринте
 
 автор: id_cloun   (18.12.2011 в 23:26)   письмо автору
14.6 Кб
 
 

Всех приветствую! Делаю задание на C++ Builder 6: найти кратчайший путь в лабиринте от текущего положения до выхода. Лабиринт сделал через StringGrid, где '0' – пустая область, куда можно делать ход, '1' — препятствие. Расставил препятствия вручную, так как иначе можно получить тупиковую ситуацию. Ячейка 1А — начало лабиринта, 5Е — выход. Минимальный путь — 2B, 3C, 4D. Максимальный — 2B, 1B, 1C, 1D, 1E, 2E, 3E, 4E. После нахождения кратчайшего пути заголовку Label присваивается координаты ячеек, входящих в этот самый путь. Понятно, чтобы найти минимальный маршрут, нужно организовать цикл с использованием алгоритма (например, волнового). С этим у меня и возникли проблемы. Примерно как работают алгоритмы мне понятно, но вот с реализацией проблема. Возможно, программирование не для меня или сказывается маленький опыт. От не понимания, что делать дальше, посмотрел как суммировать значения всех ячеек. Надеюсь, кто-нибудь подскажет как быть дальше. С уважением, Сергей.



// создание лабиринта
Form1->StringGrid1->Cells[0][0]='0'//start
Form1->StringGrid1->Cells[4][4]='0'//finish
Form1->StringGrid1->Cells[1][0]='0'//long way
Form1->StringGrid1->Cells[1][1]='0'//short way
Form1->StringGrid1->Cells[1][2]='1';
Form1->StringGrid1->Cells[1][3]='1';
Form1->StringGrid1->Cells[1][4]='1';
Form1->StringGrid1->Cells[2][0]='0'//l
Form1->StringGrid1->Cells[2][1]='1';
Form1->StringGrid1->Cells[2][2]='0'//s
Form1->StringGrid1->Cells[2][3]='1';
Form1->StringGrid1->Cells[2][4]='1';
Form1->StringGrid1->Cells[3][0]='0'//l
Form1->StringGrid1->Cells[3][1]='1';
Form1->StringGrid1->Cells[3][2]='1';
Form1->StringGrid1->Cells[3][3]='0'//s
Form1->StringGrid1->Cells[3][4]='1';
Form1->StringGrid1->Cells[4][0]='0'//l
Form1->StringGrid1->Cells[4][1]='0'//l
Form1->StringGrid1->Cells[4][2]='0'//l
Form1->StringGrid1->Cells[0][1]='1';
Form1->StringGrid1->Cells[0][2]='1';
Form1->StringGrid1->Cells[0][3]='1';
Form1->StringGrid1->Cells[0][4]='1';
Form1->StringGrid1->Cells[4][3]='0'//l

// суммирование значений всех ячеек
int summa = 0;
  for(int i = 0; i < StringGrid1->ColCount; i++)
    for(int j = 0; j < StringGrid1->RowCount; j++)
      summa += StrToInt(StringGrid1->Cells[i][j]);
Label12->Caption=summa;

  Ответить  
 
 автор: cheops   (19.12.2011 в 14:42)   письмо автору
 
   для: id_cloun   (18.12.2011 в 23:26)
 

Вообще обычно строят дерево или граф возможных решений и по нему ищут все возможные пути из одной точки в другую. Все полные пути складируют в массив с указанием длины пути, а далее среди них ищут минимальный. Ну по крайней мере это, первое, что приходит в голову.

PS Средствами любыми можно пользоваться? Т.е. можно ли пользоваться библиотекой STL? Вам потребуется довольно много динамической памяти, возможно связанные списки.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования