Форум: "Начинающим";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];
ВнизКак из 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.045 c