旅行商问题(数学建模)MATLAB代码详解

旅行商问题MATLAB求解(常规思路)

  • 参考书籍
    • 注意事项
      • MATLAB代码
      • 运行结果

参考书籍

参考司守奎写的数学建模算法与应用中的58页内容,并且对书中的代码进行详细解释。

注意事项

旅行商问题(数学建模)MATLAB代码详解_第1张图片

MATLAB代码

clc,clear
%旅行商问题简单来说就是计算出发地经过若干地点再返回原地的最短路径
% 这个程序围绕数学建模书59页问题,从地点5开始出发,最后再回到地点5
a=zeros(6);  %初始化邻接矩阵
a(1,2)=56;a(1,3)=35;a(1,4)=21;a(1,5)=51;a(1,6)=60;
a(2,3)=21;a(2,4)=57;a(2,5)=78;a(2,6)=70;a(3,4)=36;a(3,5)=68;a(3,6)=68;
a(4,5)=51;a(4,6)=61;a(5,6)=13;%对邻接矩阵进行赋值
a=a+a';%利用对称矩阵的性质获得最终得邻接矩阵
L=size(a,1); %获取矩阵的行数,如果是size(a,2)就是获取矩阵的列数
c=[5 1:4 6 5];  %这样写是为了方便,实际上c=[5 1 2 3 4 6 5],这个定义的是初始圈
[circle,long]=modifycircle(a,L,c); %调用下面的修改圈的子函数
circle,long  %注意如果在变量名后面加上分号的话就不会在窗口显示它的值,如果想显示值就不要加分号
function [circle,long]=modifycircle(a,L,c)
    for k=1:L  %因为要走过六个地方,于是要遍历循环
    flag=0;    %预先设置是否知道已经修改了边,如果循环后flag还是0,说明并没有修改初始圈
    long=0;    %初始化总路程
    for m=1:L-2 %因为算法中的i是1<=i

运行结果

long =

    51


long =

    72


long =

   107


long =

   128


long =

   198


long =

   211


circle =

     5     4     1     3     2     6     5


long =

   211

你可能感兴趣的:(数学建模,matlab,矩阵,线性代数)