ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:252.24KB ,
资源ID:2165033      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2165033.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(图论算法及matlab程序的三个案例.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

图论算法及matlab程序的三个案例.docx

1、图论算法及matlab程序的三个案例图论实验三个案例单源最短路径问题1.1 Dijkstra 算法Dijkstra算法是解单源最短路径问题的一个贪心算法。其基本思想是,设置 一个顶点集合S并不断地作贪心选择来扩充这个集合。一个顶点属于集合S当且 仅当从源到该顶点的最短路径长度已知。设 v是图中的一个顶点,记l(v)为顶点 v到源点V1的最短距离,Vi,Vj V,若(Vi,Vj) E,记“到百的权w 。Dijkstra 算法:1S vJ I(vJ 0 ; v V 可 1(v) i i S V vJ ;J 7 J J J 72S ,停止,否则转;l(v) min l(v) , d(Vj,v) Vj

2、 S4存在 Vi 1,使 l(Vi l) minl(V),V S ;5S SUvi 1 S S vi 1 i i 1实际上,Dijkstra算法也是最优化原理的应用:如果V1V2LVn1Vn是从V1到Vn 的最短路径,贝U V1V2L Vn1也必然是从V1到Vn 1的最优路径。在下面的MATLA实现代码中,我们用到了距离矩阵,矩阵第 i行第j行元 素表示顶点Vi到Vj的权Wj,若v到Vj无边,则Wij realmax,其中realmax是 MATLA常量,表示最大的实数(1.7977e+308)function re=Dijkstra(ma)%用 Dijkstra 算法求单源最短路径%俞入参量

3、ma是距离矩阵%输出参量是一个三行 n 列矩阵,每列表示顶点号及顶点到源的最短距离和 前顶点n=size(ma,1);% 得到距离矩阵的维数s=ones(1,n);s(1)=0;% 标记集合 S和 S 的补r=zeros(3,n);r(1,:)=1:n;r(2,2:end)=realmax;% 初始化for i=2:n;% 控制循环次数mm=realmax;for j=find(s=0);% 集合S中的顶点for k=find(s=1);% 集合S补中的顶点 if(r(2,j)+ma(j,k)r(2,k)mm=r(2,k);t=k;endendends(1,t)=0;%找到最小的顶点加入集合S

4、endre=r;1.2动态规划求解最短路径动态规划是美国数学家 Richard Bellman在1951年提出来的分析一类多阶 段决策过程的最优化方法,在工程技术、工业生产、经济管理、军事及现代化控 制工程等方面均有着广泛的应用。动态规划应用了最佳原理:假设为了解决某一 优化问题,需要依次作出n个决策Di,D2丄,Dn,如若这个决策是最优的,对于 任何一个整数k,1k0);% 当前结点邻接结点if path(j,t)+scheme(2,t) ShortestPath(path,ss)得到以下结果:1234567891011121314151618131613109127687594302568

5、891012121214151516160将该结果表示为图,即为图 1 粗线所示棋盘覆盖问题1.1问题的提出在一个2k 2k个方格组成的棋盘中,若恰有一个方格与其他方格不同,则称该方格为一特殊方格,且称该棋盘为一特殊的棋盘。如图 1就是当k 3时的特1.2问题的分析k易知,用到的L型骨牌个数恰为(4 1)/3。利用分治策略,我们可以设计出解棋盘覆盖问题的一个简捷的算法当k0时,我们将2k 2k棋盘分割为4个2k1 2k1子棋盘如图3两粗实线所示。特殊方格必位于4个较小子棋盘之一中,其余3个子棋盘中无特殊方格。为 了将这3个无特殊方格的子棋盘转化为特殊棋盘,我们可以用一个L型骨牌覆盖 这3个较小

6、棋盘的会合处,如图4中央L型骨牌所示,这3个子棋盘上被L型骨 牌覆盖的方格就成为该棋盘上的特殊方格,从而将原问题转化为4个较小规模的 棋盘覆盖问题。递归地使用这种分割,直至棋盘简化为 1 1棋盘。1.3算法的MATLA实现首先特殊方格在棋盘中的位置可以用一个1 2的数组sp表示;对于图2所 示的4种L型骨牌,可用数字1,2,3,4表示;对于特殊棋盘的骨牌覆盖表示,只须注意到图4所示的关键点,对每个关键点,给定一种L型骨牌,就能覆盖整个kk棋盘,所以对于 2k 2k 的特殊棋盘的骨牌覆盖,可用一个 (2 1) (2 1)的矩阵表示。按照这种思想,图 4 的矩阵表示为:10401020400020

7、40302030003000104030204000304030403k=4,特殊万格位置为:1,4,覆盖矩阵为:下面是在MATLAB的棋盘覆盖实现程序。function re = chesscover(k,sp)%解决棋盘的覆盖问题%棋盘为2Ak*2Ak,sp为特殊方格的棋盘位置global covermatrixcovermatrix=zeros(2Ak-1,2Ak-1);even1=floor(sp(1,1)/2)*2=sp(1,1);% 判断水平位置是否是偶数even2=floor(sp(1,2)/2)*2=sp(1,2);% 判断竖直位置是否是偶数if eve n仁=1&eve n2

8、=0%找出找出特殊方格相对关键结点的位置i=4;elsei=even1+even2+1;endtempfun(1,1,k,sp(1,1)-even1,sp(1,2)-even2,i);re=covermatrix;function tempfun(top,left,k,tp)% 子函数 ,tp 为转换后特殊方格在棋盘网 络的相对位置global covermatrixif k=1switch tp(1,3)case 1covermatrix(tp(1,1),tp(1,2)=3;case 2covermatrix(tp(1,1),tp(1,2)=4;case 3covermatrix(tp(1,

9、1),tp(1,2)=1;case 4covermatrix(tp(1,1),tp(1,2)=2;endelsehalf=2A(k-1);i=top+half-1;j=left+half-1;if tp(1,1)iif tp(1,2)j% 特殊方格在右下covermatrix(i,j)=1;% 添加类型为 3 的 L 型骨牌tempfun(top,left,k-1,i-1,j-1,3);tempfun(top,left+half,k-1,i-1,j+1,4);tempfun(top+half,left+half,k-1,tp);tempfun(top+half,left,k-1,i+1,j-1,2);else % 特殊方格在左下covermatrix(i,j)=2;% 添加类型为 4 的 L 型骨牌tempfun(top,left,k-1,i-1,j-1,3);tempfun(top,left+half,k-1,i-1,j+1,4);tempfun(top+half,left+half,k-1,i+1,j+1,1);tempfun(top+half,left,k-1,tp);endend

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1