假设各个城市的X坐标为zuobiao_X,Y坐标为zuobiao_Y,zuobiao_X(i)表示第i个城市的横坐标,一共有n个城市,那么,采用以下循环语句进行画图:
for i=1:n-1
plot([zuobiao_X(i),zuobiao_X(i+1)],[zuobiao_Y(i),zuobiao_Y(i+1)],'-r');
hold on;
end
'-r'表示用红色的线连起来。望采纳。
画最小生成树的两种方法:
一种是避圈法
function A = fun(W) [m, n] = size(W); e = 0;for i = 1 : n for j = i : n if W(i, j) ~= 0 e = e + 1; E(e, :) = [i, j, W(i, j)]; end endend % sort W's edge by weightfor i = 1 : e - 1 for j = i + 1 : e if E(i, 3) > E(j, 3) temp = E(j, :); E(j, :) = E(i, :); E(i, :) = temp; end endend A = zeros(1, 3);S = 1 : n; for i = 1 : e % if find-set(u) ~= find-set(v) if S(E(i, 1)) ~= S(E(i, 2)) % A = A + (u, v) A = cat(1, A, E(i,:)); %union(u, v) indicator = S(E(i, 1)); for j = 1 : n if S(j) == indicator S(j) = S(E(i, 2)); end end endend A(1, :) = [];
例子:W=xlsread('C:\Users\paul\Desktop\xls');fun(W)
破圈法
function T=tree()
A=[inf 50 14 40 13;50 inf 15 20 inf;14 15 inf 10 20;40 20 10 inf 10;13 inf 20 10 inf];n=5;k=1;for(i=1:n-1) for(j=i+1:n) if(A(i,j)>0) x(k)=A(i,j); kk=1; for(s=1:k-1) if(x(k)==x(s)) kk=0; break; end end k=k+kk; end endendk=k-1;for(i=1:k-1) for(j=i+1:k) if(x(j) xx=x(j); x(j)=x(i); x(i)=xx; end endendT(n,n)=0;q=0;for(s=1:k) if(q==n)break; endfor(i=1:n-1) for(j=i+1:n) if (A(i,j)==x(s)) T(i,j)=x(s); T(j,i)=x(s);TT=T;while(1)pd=1;for(y=1:n)kk=0;for(z=1:n) if(TT(y,z)>0) kk=kk+1; zz=z; end;endif(kk==1) TT(y,zz)=0; TT(zz,y)=0; pd=0;endendif(pd)break;endendpd=0;for(y=1:n-1) for(z=y+1:n) if(TT(y,z)>0)pd=1; break; end endendif(pd) T(i,j)=0; T(j,i)=0;else q=q+1;end end endendend
MODEL:
SETS:
CITY / 1 34/: U;
LINK( CITY, CITY):DIST, X;
ENDSETS
DATA:
!在此处输入距离矩阵;
ENDDATA
N = @SIZE( CITY);
MIN = @SUM( LINK: DIST X);
@FOR( CITY( K):
@SUM( CITY( I)| I #NE# K: X( I, K)) = 1;
@SUM( CITY( J)| J #NE# K: X( K, J)) = 1;
@FOR( CITY( J)| J #GT# 1 #AND# J #NE# K:
U( J) >= U( K) + X ( K, J) -
( N - 2) ( 1 - X( K, J)) +
( N - 3) X( J, K));
);
@FOR( LINK: @BIN( X));
@FOR( CITY( K)| K #GT# 1:
U( K) <= N - 1 - ( N - 2) X( 1, K);
U( K) >= 1 + ( N - 2) X( K, 1)
);
END
你试一下这段代码,如果显示超过版本能力限制的话,就找个正版来运行
据 Drew 所知最短路经算法现在重要的应用有计算机网络路由算法,机器人探路,交通路线导航,人工智能,游戏设计等等。美国火星探测器核心的寻路算法就是采用的D(D Star)算法。
最短路经计算分静态最短路计算和动态最短路计算。
静态路径最短路径算法是外界环境不变,计算最短路径。主要有Dijkstra算法,A(A Star)算法。
动态路径最短路是外界环境不断发生变化,即不能计算预测的情况下计算最短路。如在游戏中敌人或障碍物不断移动的情况下。典型的有D算法。
这是Drew程序实现的10000个节点的随机路网三条互不相交最短路
真实路网计算K条路径示例:节点5696到节点3006,三条最快速路,可以看出路径基本上走环线或主干路。黑线为第一条,兰线为第二条,红线为第三条。约束条件系数为12。共享部分路段。 显示计算部分完全由Drew自己开发的程序完成。
参见 K条路算法测试程序
Dijkstra算法求最短路径:
Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。
Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。
Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN, CLOSE表方式,Drew为了和下面要介绍的 A 算法和 D 算法表述一致,这里均采用OPEN,CLOSE表的方式。
大概过程:
创建两个表,OPEN, CLOSE。
OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。
1. 访问路网中里起始点最近且没有被检查过的点,把这个点放入OPEN组中等待检查。
2. 从OPEN表中找出距起始点最近的点,找出这个点的所有子节点,把这个点放到CLOSE表中。
3. 遍历考察这个点的子节点。求出这些子节点距起始点的距离值,放子节点到OPEN表中。
4. 重复2,3,步。直到OPEN表为空,或找到目标点。
这是在drew 程序中4000个节点的随机路网上Dijkstra算法搜索最短路的演示,黑色圆圈表示经过遍历计算过的点由图中可以看到Dijkstra算法从起始点开始向周围层层计算扩展,在计算大量节点后,到达目标点。所以速度慢效率低。
提高Dijkstra搜索速度的方法很多,据Drew所知,常用的有数据结构采用Binary heap的方法,和用Dijkstra从起始点和终点同时搜索的方法。
推荐网页:>
以上就是关于在TSP问题中,想用matlab将路线画出来,如何做到全部的内容,包括:在TSP问题中,想用matlab将路线画出来,如何做到、最小生成树如何获取tsp最小路径 matlab代码、50分在线等34*34矩阵TSP问题matlab或lingo程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)