数学建模中,给出非常多的节点,求这些节点的最短路径(类似一条线的路径),应该用什么算法好?

老师说不要用蚁群算法,遗传算法之类太悬的算法... 老师说不要用蚁群算法,遗传算法之类太悬的算法 展开
 我来答
zxkjack123
推荐于2017-11-25 · TA获得超过584个赞
知道小有建树答主
回答量:416
采纳率:0%
帮助的人:342万
展开全部
下面是我自己编写的一段代码,用来求过包含两千多个点的最短路,速度很快,比遗传、蚁群快而且最短路更短。你可以试试看,有问题再问我。
function [S,len]=short(P)
% 此程序用来求相同类型点间的最短路
% P表示某一类型的点的坐标矩阵
% p是最短路径
% d是路径权值和
%建立权值矩阵
n=length(P);%求该类型点的数量
W=zeros(n,n);
for i=1:n %计算权值并填充权值矩阵,由于各点联通,此权值矩阵就是该图的最短路矩阵
for j=(i+1):n
W(i,j)=sqrt((P(i,1)-P(j,1))^2+(P(i,2)-P(j,2))^2);
end
end
for i=2:n
for j=1:(i-1)
W(i,j)=W(j,i);
end
end
%求通过所有点的最短路
%先求从i点至j点,必须通过指定其他n-2个点的最短路,选出其中的的最短路
S=zeros(1,n);
S(1)=1; %先插入1,2点,以此为基准,每次插进一个新点
S(2)=2;
d1=2*W(1,2);
for i=3:n %新加入的点的标号
d1i=zeros(1,i); %插入第i个点,有i中可能的距离,其中最小值将为该轮的d1
for j=1:i %新加入点的位置,插入第i个点是有i个空位可供选择
if j==1 %在第一个空位插入
d1i(j)=d1+W(i,S(1))+W(i,S(i-1))-W(S(1),S(i-1)); %插入点在首端时,距离为原距离与第i点与上一次插入后的第1位置的点之间距离之和
end
if j>1 & j<i %在中间的空位插入
d1i(j)=d1+W(S(j-1),i)+W(i,S(j))-W(S(j-1),S(j));
end
if j==i
d1i(j)=d1+W(S(i-1),i)+W(S(1),i)-W(S(1),S(i-1));
end
end
[d1,I]=min(d1i);
S((I+1):i)=S(I:(i-1)); %将第I位后面的点后移一位
S(I)=i;%将第i点插入在I位置
end
len=d1;

下面这段代码是我用来把上面的结果保存到txt文件中的代码,如果你需要,可以用用。代码是我上次用过的没有改,你自己按照需要自己改吧。
clear
close all
clc
loaddata
X=[C;E;I;J];
[S,len]=short(X);
DrawPath(S,X);
print(1,'-dpng','cmeiju3.png');
% 将结果保存至txt文件
fid=fopen('cmeijulujin.txt','wt'); %创建alunjin.txt文件
fprintf(fid,'c号刀具\n');
fprintf(fid,'%d %d\n',X(S));
save('cmeijus','S');
save('cmeijulen','len');
追问
高手啊,最重要的是你猜对了我在做哪道题....
百度网友e1b0deb
2012-08-20 · TA获得超过838个赞
知道小有建树答主
回答量:669
采纳率:0%
帮助的人:296万
展开全部
dijkstra
自己做个距离矩阵就是
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式