Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.05;
Скачать: CL | DM;

Вниз

Как из A(x1,y1) в B(x2,y2) в StringGrid?   Найти похожие ветки 

 
abba   (2006-10-22 21:29) [0]

Лабиринт задан в виде матрицы размером n на m. Стенам лабиринта соответствуют единицы, проходам - нули. Определить, можно ли из точки с координатами (i1, j1) попасть в точку с координатами (i2, j2).
Спасибо.


 
Kolan ©   (2006-10-22 21:33) [1]

> [0] abba   (22.10.06 21:29)
> Лабиринт задан в виде матрицы размером n на m. Стенам лабиринта
> соответствуют единицы, проходам - нули. Определить, можно
> ли из точки с координатами (i1, j1) попасть в точку с координатами
> (i2, j2).
> Спасибо.


Метод равных цен. Есть программка - лаба с соответствующим качеством :)


 
Kolan ©   (2006-10-22 21:34) [2]

300kB Могу дать :)


 
abba   (2006-10-22 21:35) [3]

Было бы неплохо
Tolikmor@tut.by


 
abba   (2006-10-22 21:36) [4]

А этот метод равных цен использует рекурсию?


 
Kolan ©   (2006-10-22 21:37) [5]

http://www.fvt.rsu.ru/index.php?page=student&selection=main&navigation=help_kfield&topic=help

Вспомнил, даже статью сдела про неё(для её части) для одногрупников. Во.. делать нечего было :)


 
Kolan ©   (2006-10-22 21:39) [6]

Послал, за качество не пинать...

> А этот метод равных цен использует рекурсию?

А как же.


 
abba   (2006-10-22 21:40) [7]

Спасибо


 
Kolan ©   (2006-10-22 21:42) [8]

Да, чтобы был лабиринт там надо кое-что подправить.. Точно делал. Надо чтобы клетки с "0" были такогоже типа что и окоймление.

Те свойство:

property CellType: TCellType read FCellType write FCellType;

Должно быть:

TCellType =
   (
     ctUsualCell,
     ctBorder,
     ctSelected,
     ctSelectedStart,
     ctSelectedEnd

ЗЫ
 Все по памяти...
   );


 
Kolan ©   (2006-10-22 22:14) [9]

О исправил:

Было:
 NewField(10, 10, 100);

Стало:
 NewField(10, 10, 2);

И добавить:
procedure TCustomField.InitializeFieldWithRandomRanges(Range: Integer);
var
 I, J: Integer;
begin
 Randomize;
 for I := Low(FCells) to High(FCells) do
   for J := Low(FCells[I]) to High(FCells[I]) do
   begin
     FCells[I, J].Data := Random(Range);
     FCells[I, J].Coordinates := Point(I, J);
     if (I = 0) or (J = 0) or (I = FRowCount - 1) or (J = FColCount - 1) then
     begin
       FCells[I, J].CellType := ctBorder;
       FCells[I, J].Data := -1;
     end;
     if FCells[I, J].Data = 0 then
       FCells[I, J].CellType := ctBorder;

   end;
end;


 
Loginov Dmitry ©   (2006-10-22 23:09) [10]

http://kladovka.net.ru/download.cgi?id=239

Задачу выполнит на 100%. Только без StringGrid"ов %)


 
TUser ©   (2006-10-23 07:42) [11]

См. алгоритм Дейкстры

Для твоей задачи примерно так
all flags := false;
flags[A] := true;
for each cell do
 for each cell do // да раза, это не опечатка
   if not flags[this cell] then
     for each acell do
       if flags[acell] and (acell рядом с cell) then
         flags[cell] = true
return flags[B]

+ очевидная оптимизация



Страницы: 1 вся ветка

Текущий архив: 2006.11.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
15-1160386826
Сало
2006-10-09 13:40
2006.11.05
Крамник-Топалов


5-1142499037
Arm79
2006-03-16 11:50
2006.11.05
ошибка при обращении к Parameters наследника TADOStoredProc


15-1160684019
Ученик чародея
2006-10-13 00:13
2006.11.05
Получаете ли вы удовольствие от программирования на Delphi?


8-1137653425
ronyn
2006-01-19 09:50
2006.11.05
DS Pack прокрутка.


2-1161255785
pkm
2006-10-19 15:03
2006.11.05
Удалить текущую строку в типизированном файле.