数模matlab入门教程-003-TSP问题通用建模方法与C++求解方法
https://blog.youkuaiyun.com/CoomCon/article/details/108937551
在003的基础上继续开始,matlab代码的编写;
总的来讲,有了C++的基础或者说是经验可以直接进行模仿编写;
当然先普及一下matlab中所谓的位操作
1 matlab位操作

2 TSP代码
maltab求解TSP的代码:
%% 邻接矩阵
edges=[0 30 6 4; 30 0 5 10 ;6 5 0 20; 4 10 20 0];
%% 动态规划
%% 初始化dp矩阵
[m,n] = size(edges);
stateNum = bitshift(1,n-1);
dp = zeros(n,stateNum); %初始化为0 后面可以在循环中变成inf 也可以提前循环初始化为inf
% 提前循环初始化为inf
for i=1:n
for j=1:stateNum
dp(i,j)=inf;
end
end
%% 动规算法部分
% 更新第一列
for i=1:n
dp(i,1)=edges(i,1);
end
% 循环迭代求解
% matlab 数组索引只能从1开始 所以需要调整索引
for j=1:stateNum-1
for i=0:n-1
if i==0 || bitand(bitshift(j,-(i-1)),1)==0 %找没去过的
for k=0:n-1
temp2 = bitand(bitshift(j,-(k-1)),1);
if k==0 || bitand(bitshift(j,-(k-1)),1)==1
dp(i+1,j+1) = min(dp(i+1,j+1),edges(k+1,i+1)+dp(k+1,bitxor(j,(bitshift(1,k-1)))+1));
end
end
end
end
end
%% 结果就是
dp(1,stateNum)
3 dp矩阵

5155



被折叠的 条评论
为什么被折叠?



