Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 2
Регистрация: 12.10.2016
Сообщений: 137
1

Задача о выборе траектории методом динамического программирования

21.05.2018, 10:19. Показов 2888. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Очень нужна программа. Помогите пожалуйста.
Миниатюры
Задача о выборе траектории методом динамического программирования  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2018, 10:19
Ответы с готовыми решениями:

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

Задача о выборе траектории методом динамического программирования
Необходимо проехать от Киева до Симферополя. Возможны несколько путей (см.сеть). Число,...

Задача методом динамического программирования
Добрый день. Передо мной стоит решение задачи методом динамического программирования (табличный...

Задача коммивояжера методом динамического программирования
Помогите пожалуйста переделать коммивояжера методом динамического программирования. Пусть n - это...

7
0 / 0 / 2
Регистрация: 12.10.2016
Сообщений: 137
29.05.2018, 15:23  [ТС] 2
Как переделать программу что бы матрица задавалась сразу , а не через вод или рандомно, как в программе, помогите пожалуйста.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
program Transport;
const n=17; 
      m=11;
type
  mas = array[1..100,1..100] of integer;
 
var
  i, j: integer;
  cen,pyti: mas;
 
 
 
procedure vv(ms:mas);
var i,j:integer;
begin
for i:=1 to n do begin
for j:=1 to m do
if (i mod 2=0)then begin
if ((i mod 2)<>(j mod 2)) then write(ms[i,j]:2,' ') else write('   ');
end
else begin if ((i mod 2)<>(j mod 2)) then write(ms[i,j]:2,'-') else write('-+-');end;
writeln; end;
writeln;
 
end;
 
//body
begin
for i:=1 to n do
for j:=1 to m do
if ((i mod 2)<>(j mod 2)) then read(cen[i,j]);
                               //cen[i,j]:=random(20)+1;
writeln;
vv(cen);
 
//вычисления
for i:=1 to n do
for j:=1 to m do
if (i mod 2=1)then begin
if ((i mod 2)=(j mod 2)) then begin
if (i=1)and(j=1)then continue;
if (i>1)and(j=1)then begin cen[i,j]:=cen[i-2,j]+cen[i-1,j]; continue; end;
if (i=1)and(j>1)then begin cen[i,j]:=cen[i,j-2]+cen[i,j-1]; continue; end;
 
 
 
 
 
 
if cen[i-1,j]+cen[i-2,j]<cen[i,j-1]+cen[i,j-2] then begin cen[i-1,j-1]:=1; cen[i,j]:=cen[i-1,j]+cen[i-2,j];  end 
                                               else begin cen[i-1,j-1]:=2; cen[i,j]:=cen[i,j-1]+cen[i,j-2];  end;
                                              
end;
end;
 
writeln;
//определение пути
i:=n;
j:=m;
while (j>-2)and(i>-2) do
begin
if i<1 then i:=1;
if j<1 then j:=1;
pyti[i,j]:=1;
if (i=1)and(j=1)then break;
if (i=1)and(j>1)then begin pyti[i,j-1]:=1; j:=j-2; continue; end;
if (i>1)and(j=1) then begin pyti[i-1,j]:=1; i:=i-2; continue; end;
if (cen[i-1,j-1]=1) then begin pyti[i-1,j]:=1; i:=i-2;   end 
                    else begin pyti[i,j-1]:=1; j:=j-2; end;
end;
vv(pyti);
writeln('Цена минимального пути: ',cen[n,m]);
end.
0
5079 / 2651 / 2349
Регистрация: 10.12.2014
Сообщений: 10,028
30.05.2018, 07:51 3
Как-то так:
Pascal
28
29
30
31
32
33
begin
  var a:=arr(5,11,10,9,5,4,3,5,8,3,6,7,5,10,8,7,6,11,11,11,11,7,11,5,4,12,13,8,9,9,9,9,5,6,11,10,5,8,12,14,14,14,14,9,10,5,9,4,9,4,3,8,12,8,7,5,5,7,7,14,6,9,11,6,13,8,7,4,8,9,6,8,4,5,9,11,2,8,11,13,5,14,12,9,17,4,13,5,1,16,2,5,5);
  var index:=0;
for i:=1 to n do
for j:=1 to m do
if ((i mod 2)<>(j mod 2)) then begin cen[i,j]:=a[index];index+=1;end;//read(cen[i,j]);
Или вы не выложили условие вообще (кроме картинки ;–),
или вы не учли возможного движения справа-налево и снизу вверх!

Я бы решил эту задачу так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
const
  h : array [,] of Integer = ((5,11,10,9,5),(7,5,10,8,7),(11,5,4,12,13),(6,11,
    10,5,8),(10,5,9,4,9),(5,5,7,7,14),(7,4,8,9,6),(8,11,13,5,14),(1,16,2,5,5));
  v : array [,] of Integer = ((4,6,8,12,4,6,8,12),(3,11,9,14,3,9,4,9),(5,11,9,
    14,8,11,5,17),(8,11,9,14,12,6,9,4),(3,11,9,14,8,13,11,16),(6,7,5,9,7,8,2,5));
var
  a := MatrFill(9,6,0);
  minSum := Integer.MaxValue;
 
procedure FindPath(n, row, col, sum : Integer);
begin
  if sum >= minSum then Exit;
  a[row, col] := n;
  if (row = 8) and (col = 5) then
    minSum := sum
  else 
    begin
      if (row > 0) and (a[row-1, col] = 0) then FindPath(n+1, row-1, col, sum + v[col, row-1]);
      if (col > 0) and (a[row, col-1] = 0) then FindPath(n+1, row, col-1, sum + h[row, col-1]);
      if (row < 8) and (a[row+1, col] = 0) then FindPath(n+1, row+1, col, sum + v[col, row]);
      if (col < 5) and (a[row, col+1] = 0) then FindPath(n+1, row, col+1, sum + h[row, col]);
    end;
  a[row, col] := 0;
end;
 
begin
  FindPath(1, 0, 0, 0);
  WriteLn(minSum);
end.
0
0 / 0 / 2
Регистрация: 12.10.2016
Сообщений: 137
04.06.2018, 09:50  [ТС] 4
можете написать по другому, у меня паскаль 3.0 , он пишет ошибку , неизвестное имя, поменять версию не могу . Помогите пожалуйста.
0
5079 / 2651 / 2349
Регистрация: 10.12.2014
Сообщений: 10,028
04.06.2018, 10:53 5
Где пишет ошибку?

Добавлено через 27 секунд
И что написать по другому?
0
0 / 0 / 2
Регистрация: 12.10.2016
Сообщений: 137
04.06.2018, 11:56  [ТС] 6
Matrfill пишет неизвестное имя

Добавлено через 1 минуту
Не по другому , но что бы работала в версии Паскаля 3.0
0
5079 / 2651 / 2349
Регистрация: 10.12.2014
Сообщений: 10,028
04.06.2018, 12:19 7
Pascal
6
7
var
  a : array [,] of Integer;
Pascal
26
27
begin
  SetLength(a,9,6);
0
0 / 0 / 2
Регистрация: 12.10.2016
Сообщений: 137
04.06.2018, 13:19  [ТС] 8
Спасибо , попробую

Добавлено через 56 минут
он выводит большое число , неправильный ответ .
0
04.06.2018, 13:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2018, 13:19
Помогаю со студенческими работами здесь

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

Задача о рюкзаке методом динамического программирования, исправить код
Помогите разобраться! Написал прогу, которая должна решать задачу о рюкзаке методом Беллмана...

Игра Ним методом динамического программирования
добрый день помогите решить задачу методом динамического программирования. Игра Ним с одной кучей...

Задача о размене -задача динамического программирования?
Является ли задача о размене суммы задачей динамического программирования? Мне кажется нет. хотя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru