Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2008, 18:55   #1
Xardas
Сисадмин
Форумчанин
 
Аватар для Xardas
 
Регистрация: 28.12.2007
Сообщений: 320
По умолчанию Задача с олимпиады

Интересная попалась задачка, которую я, к сожалению немного запорол, но покоя она мне не дает, а потому обращаюсь к вам, уважаемые товарищи программисты.

Сама задача длинная (там про зараженную местность, уровень радиации и т.д.), я ее немного перефразирую: Допустим есть массив N на M, необходимо найти путь из точки [1,1] в [N,M] чтобы сумма элементов была минимальной. (немного, конечно, неудачно выразился). Причем выбирать можно только те элементы, которые находятся либо на одной строке либо на одном столбце, по диагонали нельзя

Например
1 | 100 | 0 | 50 | 100
1 | 100 |0 | 0 | 0
2 | 0 | 0 | 3 | 1
0 | 0 | 100 | 2 | 1

Массив 4 на 5 - минимальная сумма 6
Путь: 1 -> 1 -> 2 -> 0 -> 0 -> 0 -> 0 -> 0 -> 1

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

Я думаю смысл понятен. Я пытался рекурсивно перебрать все возможные варианты, только как то не получилось.

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

PS: Delphi or Pascal

PS: Прошу прощения у меня че то глюкнуло - 2 темы одинаковых создалось

Последний раз редактировалось Xardas; 27.02.2008 в 19:25.
Xardas вне форума Ответить с цитированием
Старый 27.02.2008, 19:04   #2
vitalik007
Дельфист
Форумчанин
 
Аватар для vitalik007
 
Регистрация: 14.08.2007
Сообщений: 317
По умолчанию

Волновой алгоритм
ICQ-465033557
WINDOWS CE THE BEST
vitalik007 вне форума Ответить с цитированием
Старый 27.02.2008, 19:14   #3
Xardas
Сисадмин
Форумчанин
 
Аватар для Xardas
 
Регистрация: 28.12.2007
Сообщений: 320
По умолчанию

Цитата:
Сообщение от vitalik007 Посмотреть сообщение
Волновой алгоритм
А про графы то я совсем забыл...

Спасибо! Будем пробовать!
Xardas вне форума Ответить с цитированием
Старый 27.02.2008, 21:43   #4
Xardas
Сисадмин
Форумчанин
 
Аватар для Xardas
 
Регистрация: 28.12.2007
Сообщений: 320
По умолчанию

Подскажите пожалуйста в чем проблема

вот процедура:
Код:
procedure Next(var x,y:byte);
     begin
     if (X <10) and (MapM[X, Y] - MapM[X + 1, Y] = 1) then
        begin
             X := X + 1;
             exit;
        end;
     if (X >1) and (MapM[X, Y] - MapM[X - 1, Y] = 1) then
        begin
              X := X - 1;
              exit;
        end;
     if (Y <10) and (MapM[X, Y] - MapM[X, Y + 1] = 1) then
        begin
             Y := Y + 1;
             exit;
        end;
     if (Y >1) and (MapM[X, Y] - MapM[X, Y - 1] = 1) then
        begin
             Y := Y - 1;
             exit;
        end;;
end;
А вот обращение к процедуре в программе:

Код:
{........................}
repeat
           MovesX[I]:=x;
           MovesY[I]:=y;
           Next(x,y);
           MapM[X,Y] := 3;
           I := I - 1;
until (X = XS) and (Y = YS);
{................................}
Вылетает ошибка "Too many actual parameters"
Как я понял "Слишком много фактических параметров".

Никак не могу понять в чем дело.

Подскажите, пожалуйста, в чем проблема!!!
Xardas вне форума Ответить с цитированием
Старый 27.02.2008, 22:19   #5
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

А попробуйка поменять название процедуры...
Например на FR.

Итого: procedure FR(var x,y:byte);

Можно даже сделать Ctrl + щелчок мышкой на имени процедуры...
И посмотреть "о чём думает" компилятор.

АДД:
Как оказывается компилятор думает что процедура Next выглядит так:
Цитата:
procedure TForm.Next;
begin
if (FFormStyle = fsMDIForm) and (ClientHandle <> 0) then
SendMessage(ClientHandle, WM_MDINEXT, 0, 0);
end;
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...

Последний раз редактировалось Карась; 27.02.2008 в 22:22.
Карась вне форума Ответить с цитированием
Старый 27.02.2008, 23:38   #6
Xardas
Сисадмин
Форумчанин
 
Аватар для Xardas
 
Регистрация: 28.12.2007
Сообщений: 320
По умолчанию

Цитата:
Сообщение от Карась Посмотреть сообщение
А попробуйка поменять название процедуры...
Например на FR.

Итого: procedure FR(var x,y:byte);

Можно даже сделать Ctrl + щелчок мышкой на имени процедуры...
И посмотреть "о чём думает" компилятор.

АДД:
Как оказывается компилятор думает что процедура Next выглядит так:
Большое спасибо, эта часть программы заработала и кажется я понял в чем суть.
Xardas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача по ООП Lenivec** Фриланс 2 17.07.2008 15:17
Задача Nil_rus Помощь студентам 3 15.05.2008 09:05
Задача с олимпиады Xardas Помощь студентам 4 29.02.2008 19:00
Задача по ТП. GE076 Помощь студентам 11 07.12.2007 19:29
Паскаль. задача с олимпиады SoulFlyMF Помощь студентам 2 13.11.2007 20:52