题目:
两点之间最短路径问题采用动态规划算法
单向算法实现:
clear
clc
% user input data
% 'a':每个阶段的站点数目
% 'b':所有站点的距离
% num:所有站点的个数总和
a=[1 2 4 3 3 2 1];
b=[5 3 -1 -1;
1 3 6 -1;-1 8 7 6;
6 8 -1 -1;3 5 -1 -1;-1 3 3 -1;-1 8 4 -1;
2 2 -1 -1;-1 1 2 -1;-1 3 3 -1;
3 5 -1 -1;5 2 -1 -1;6 6 -1 -1;
4 -1 -1 -1;3 -1 -1 -1];
num=16;
max_col=4;
% c:最小路径
% c1:第一个决策点所产生的四个距离
% c2:其他决策点所产生的四个距离,并将较小值放入c1中
a_length=size(a);
route=zeros(a_length(2),max_col);
row=2;
c=b(1,:);
c1=zeros(1,max_col);c2=zeros(1,max_col);
for i=2:a_length(2)-1
n=a(i);
for k=1:max_col
if b(row,k)>0
c1(k)=b(row,k)+c(1);
route(i,k)=1;
end
end
if n>1
for j=1:n-1
for k=1:max_col
if b(row+j,k)>0
c2(k)=b(row+j,k)+c(j+1);
if c2(k)<c1(k)||c1(k)==0
c1(k)=c2(k);
route(i,k)=j+1;
end
end
end
end
end
row=row+n;
c=c1;
c1=zeros(1,max_col);c2=zeros(1,max_col);
end
correct_col=route(end-1,1);
l_route=route(:,correct_col);
l_route(1)=1;
l_route(end-1)=correct_col;
l_route(end)=1;
disp('最小路径为');disp(c(1));disp('路径规划为');disp(l_route');
该代码仅能实现单起始点到单个终点的规划,算法小白不太会表述,仅试过求解这道题目。
若有错误或者改进方法,请各位大佬提出,谢谢