IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Пират в подземелье, Нужен второй алгоритм
1nFinite
сообщение 30.05.2005 14:54
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Прошу помомите написать алгоритм задачи
Пират в подземелье

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

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

Входные и Выходные . В первой строке входного файла содержаться числа N,M и K
В следующих N строках распологается матрица NxM лабиринта. Каждый элемент матрицы представляется стоимостью камня соответствующей комнаты. Маршрут начинается с левой верхней угловой комнаты лабиринта.

Выходной файл должен содержать единственное число, равное общей стоимости взятых с собой камней.

Пример файла исходных данных:

3 4 7
1 1 1 1
1 1 2 1
1 1 2 3

Выходной файл для данного примера:
12.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
klem4
сообщение 30.05.2005 15:27
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


а можешь уточнить, что обозначает K , три цифры перед матрицей 3 4 7, это
3х4 - размер, а 7 - К ? какие-то наверное еще есть ограничения на ход, ведь можно просто обойти всю матрицу и собрать все ... smile.gif

не могупонять в чем соль.

Сообщение отредактировано: klem4 - 30.05.2005 15:29


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
1nFinite
сообщение 30.05.2005 15:38
Сообщение #3





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


N=3 M=4 K=7
NxM - размер матрицы
K - количество комнат
В данном примере который я написал там
число ходов 7 комнат и он(пират) должет набрать на эти 7 ходов 12 камней
Начанается ход с верхнего левого угла
Он должен набрать на максимальную возможную сумму
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 30.05.2005 16:06
Сообщение #4


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


т.е всего-то комнат - 3х4=12, но ходов ему можно делать только К, в данном случае 7 ? и при этом можно возвращаться в комнаты, в которых уже был.

хех интересно.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
1nFinite
сообщение 31.05.2005 12:53
Сообщение #5





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Прошу помоч решить задачу :
Пират в подземелье

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

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

Входные и Выходные . В первой строке входного файла содержаться числа N,M и K
В следующих N строках распологается матрица NxM лабиринта. Каждый элемент матрицы представляется стоимостью камня соответствующей комнаты. Маршрут начинается с левой верхней угловой комнаты лабиринта.

Выходной файл должен содержать единственное число, равное общей стоимости взятых с собой камней.

Пример файла исходных данных:

3 4 7
1 1 1 1
1 1 2 1
1 1 2 3

Выходной файл для данного примера:
12.

N=3 M=4 K=7
NxM - размер матрицы
K - количество комнат
В данном примере там
число ходов 7 комнат и он(пират) должет набрать на эти 7 ходов 12 камней
Начанается ход с верхнего левого угла
Он должен набрать на максимальную возможную сумму

Решение этой задачи
(но нужно еще считывать из файла
матрицу NxM)

const n=3; m=4; k=7;
const podz:array[1..n,1..m] of integer=
((1,1,1,1),
(1,1,2,1),
(1,1,2,3));
const move_step:array[1..4,1..2] of shortint=((-1,0),(0,1),(1,0),(0,-1));
type stringK=string[k*3];
var podzemelie:array[1..n,1..m] of integer;
treasure,max_treasure,i1,j1:integer;
f:text;
dec_s:string[7];
move_step_l:string;
function MovePossible(i,j:byte):boolean;
begin
MovePossible:=(1<=i) and (i<=n) and (1<=j) and (j<=m);
end;
procedure GoNextRoom(i,j,n_step:byte;treasure:integer;log:stringK);
var s,next_i,next_j:byte;
direction:string[2];
begin
inc(treasure,podzemelie[i,j]);
writeln('Step: ',n_step:3,'; Room(',i,',',j,'); treasure: ',treasure,
' Max_treasure: ',max_treasure);
writeln(f,'<tr><td>',n_step,'</td><td>(',i,',',j,')</td><td>',
treasure, '</td><td>',max_treasure,'</td><td>',log,'</td></tr>');
if (n_step<k) then
for s:=1 to 4 do
begin
next_i:=i+move_step[s,1];
next_j:=j+move_step[s,2];
if MovePossible(next_i,next_j) then
begin
if (log='') then direction:=move_step_l[s]
else direction:='-'+move_step_l[s];
GoNextRoom(next_i,next_j,n_step+1,treasure,log+direction);
end
end
else {n_step>=k}
if treasure>max_treasure then
begin
max_treasure:=treasure;
writeln(' Max treasure raised to ',max_treasure);
writeln(f,'<tr><td colspan=5>Max treasure raised to ',
max_treasure,'; log=',log,'</td></tr>');
end
end;

begin
for i1:=1 to n do
for j1:=1 to m do
podzemelie[i1,j1]:=podz[i1,j1];
max_treasure:=0;
move_step_l:='NESW';
assign(f,'log.txt');
rewrite(f);
GoNextRoom(1,1,1,0,'');
writeln(' Max Treasure:', max_treasure);
writeln(f,' Max Treasure:', max_treasure);
close(f);
end.


Дело в том что мне нужно два алгоритма на эту задачу , один вот он , а вот до другого не могу додуматься , вот вас решил спросить . Мне нужен еще один алгоритм на эту задачу.


Первое: пользуйся тегами...
Второе: будешь продолжать плодить дубликаты - пеняй на себя: темы будут закрываться !!!


Сообщение отредактировано: volvo - 31.05.2005 13:04
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.06.2025 6:17
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"