收藏 分享(赏)

2012西南交通大学数学建模校赛C题-景区灭火.doc

上传人:精品资料 文档编号:8013209 上传时间:2019-06-04 格式:DOC 页数:21 大小:1.04MB
下载 相关 举报
2012西南交通大学数学建模校赛C题-景区灭火.doc_第1页
第1页 / 共21页
2012西南交通大学数学建模校赛C题-景区灭火.doc_第2页
第2页 / 共21页
2012西南交通大学数学建模校赛C题-景区灭火.doc_第3页
第3页 / 共21页
2012西南交通大学数学建模校赛C题-景区灭火.doc_第4页
第4页 / 共21页
2012西南交通大学数学建模校赛C题-景区灭火.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、西南交通大学 2012 年大学生数学建模竞赛题目: B 参赛队员 1 参赛队员 2 参赛队员 3姓名 刘童超 王枝 李若晗学号 20085728 20104702 20104693学院 数学学院 信息学院 信息学院专业 统计 计软 计软电话 15928948862 13548154032 13408694494Email 西南交通大学教务处西南交通大学实验室及设备管理处西南交通大学数学建模创新实践基地景区灭火的数学模型【摘要】本文采用网格划分的方法,将连续性问题离散化,建立了图论及其相关模型。同时运用 MATLAB 的图形处理能力进行了三维制图及一维二维插值,运用 C+进行了Dijsktr

2、a 等算法的编程计算,进而合理的解决了问题。第一问中,考虑到等高线的缺失是由于“破损” ,我们舍弃了曲线模拟,而采用了一维插值的方法,并用 MATLAB 给出了插值曲线,并直观的将曲线拟合至原等高线,发现其效果良好。对于插值结果与直观观察的差异,我们给出了误差分析,并解释了原因。第二问中,在已知等高线高度的情况下,我们采用了二维插值的方法,并利用MATLAB 软件画出了三维地形图,将景区外貌直观的呈现了出来,在计算地表面积时,我们采用了划分网格、近似求值的方法,利用 MATLAB 所给出的网格平面与水平面的夹角,估算出了地表面积,约为 26.6 ,对于其误差,我们也进一步给出了分析。2mK第三

3、问中,我们利用第二问中所求出的高度矩阵,用网格中心点代替此网格,给出了任意两点的空间距离,即任意两点的权重,从而建立了一个图论模型,对于该无向图,我们采用 Dijkstra 算法利用 C+,确定出了最佳路线,并运用 MATLAB 作图直观的将路线做了出来,并估算出最优路线的空间距离长度约为 4567m。第四问中,我们将着火点简化为几个最有可能发生火灾并且救援不方便的点,建立了一个目标规划的模型,然后在一定范围内,对消防点进行了假设,利用第三问的C+程序求出了到着火点的最长时间,移动消防点求出了最优消防站的地址。计算得出结论:在给定的坐标系下,最优消防站点的位置位于点(28,25) 。【关键词】

4、:网格离散化 大型稀疏阵 三次样条插值 最短路线 MATLAB C+一、问题的提出某国家级森林公园的地形等高图如图 1 所示。由于该风景区植被丰富,拥有大量的国家级重点保护动植物,因此旅游管理部门在图 1 的 A 点设置了景区消防站,当景区发生火灾时能及时控制和消灭火情。图 1说明:该图水平及竖直方向以 10m 为单位,山高以 50m 为单位。请你利用所学数学知识回答以下问题:1、由于人为原因,图 1 所示的等高图出现了局部破损的情况,请利用数学模型修补好该地图;2、在完成第一问的基础上,结合数学模型建立该景区的三维地形图,并估计该景区的地表面积;3、某天图 1 所示的 B 点发生了火灾,于是

5、需要从景区消防站派遣消防员去 B 点灭火,建立模型确定最佳灭火路线。4、如果需要对景区消防站进行重新选址,请建立模型确定合理的消防站地址。二、模型假设1.该公园的俯视图是一个 5120m 5120m 的正方形(一个像素单位为 10m) ,相邻两等高线的高程差为 50m;2.由于该公园植被丰富,故假设消防员步行灭火;3.消防员在前往灭火地点的过程中速度均匀;4.山体表面为连续可导的光滑曲面,其等高线之间的山体均匀线性变化;5.每一网格的山体近似看做平面;6.消防员的路线近似沿网格正交方向。三、符号说明1. 第个 网格,即其编号方式为先行后列,其具体编号过程见 5.3.2ji,)(ji2. 表示整

6、个景区的表面积;S3. 表示第 个网格的面积;4. 表示第 个网格与水平面的夹角;iQ5. 表示 点到 点的权值。jBj四、问题分析第一问中,需要修补该地形图缺失的等高线,主要有两种方法:一是平面插值,二是曲线拟合。由于曲线拟合的原则是使各点距拟合曲线的距离平方和最小,故拟合曲线基本不过已知点。而考虑到题目所给前提为“等高图破损” ,故等高线需过已知点,因此我们选用平面插值方法。插值方法有很多种,比如拉格朗日插值,艾米尔特插值,三次样条插值等,我们可以根据各自优劣来选择其插值方式,进而利用 MATLAB 软件编程计算,绘制出等高线。第二问中,需要画出景区的三维地形图,经过分析,可以利用 MAT

7、LAB 强大的数据处理功能对问题进行求解。对于未知坐标点的高程,可以用 MATLAB 进行二维插值,从而绘制出地形图。在需要计算地表面积的时候,可以根据假设 5 的平面假设,利用分块求和的方法,计算出地表面积。第三问中,需要寻找最佳路线,使消防员由消防站 A 赶到火灾点 B 的时间最短,即在假设 3 的速度均匀的条件下,求一条最短时间的路线。可以将最短时间问题简化为最短路径的问题。而对于每两个已经简化的点,由 C+编程可以算出其路径,然后根据 Dijkstra 算法,可以求出其最短路径,即最佳灭火路线。为了将直观将结果展现出来,我们可以做出它的路径图。第四问中,需要选择合理的消防站地址,这是图

8、论中的选址问题,目标是该消防站到最远处的景区着火点时间最短,为了避免繁琐的运算,我们可以将着火点选取在几个最不利的位置,将消防站选取在尽量“中心”的位置,运用 C+编程对之进行遍历,进而求出最佳消防站地址。五、模型的建立及求解5.1 地图修补模型的建立及求解由问题分析可知,我们在等高线的修补过程中宜采用插值法而不是曲线拟合,而对于插值法则有拉格朗日插值、艾米尔特插值、三次样条插值、线性插值等,下面我们将对几种主要的插值方法进行比较。5.1.1 不同插值方法的比较a.拉格朗日插值拉格朗日插值是将已知的 n 个点用 n-1 次多项式进行插值,其优点是在整个区间,只需要一个简单多项式函数去拟合,但其

9、缺点也显而易见,即在已知点过多的情况下,反而易出现龙格现象即在一些点不收敛于原函数。b.线性插值线性插值是将相邻的两个插值点之间用直线相连,这样的整个区间上的插值函数是一个分段函数。其优点是在单个区间上的函数简单,而缺点不能保证在整个函数区间中都可导,这样的插值方法与假设 3 中的可导性假设相矛盾,故在此不适用。c 三次样条插值三次样条插值函数在各个区间中均是三次函数,并且在各个点中均连续可导,这样良好的性质在物理等领域中有着广泛的用途,鉴于此,我们在等高线的修补一问中选择这种方法。5.1.2 插值模型的建立与求解如图 1 建立坐标系,并通过比例尺量取所需要的点的坐标。图 1因为在进行插值运算

10、时,选取的点个数太多会造成方程复杂并且误差过大,而选取点的个数太少会又造成信息量不足而不够精确,故经过分析比较,我们选取 4-6 个已知点作为插值点,具体选取点如下:等高线 1 等高线 2 等高线 3 等高线 4 等高线 5 等高线 6(12,37) (22,33) (15,43) (17,37) (17,41) (19,40)(13,36) (24,33) (16,38) (19,36) (18,38) (20,38)(15,35) (26,33) (17,36) (24,35)_ (20,37) (22,37)(18,33) (28,33) (19,35) (26,35) (22,36)

11、(24,36.5)(19,32) (21,34) (24,35.5) (26,36.5)(20,32) (23,34) (26,35.5)(22,31)表 1 各等高线的插值点的选取(单位:百米)利用以上数据,使用 MATLAB 对各个等高线进行三次样条插值,并输出结果,其中程序详见附录 1等高线 1-6 的插值函数图像输出如图 2图 2 插值曲线将以上所得等高线插入原图所缺失的部分,所得到的修补等高线如图 3 所示(其中红色部分为修补部分):图 3 修补后的等高线图5.1.3.误差分析从图 3 可以看到,某些地方所插入的等高线趋势稍显不自然,这是由以下因素引起的:1).工程误差。在工程测量中

12、,等高线的测量都是由有限个测量的准确值经插值而成,换而言之,其等高线并不是“处处精确” ,只要满足工程需要就可以了。所以,在这插值的误差中,这部分工程误差不可避免,但却是允许的。2)人为误差。在模型的建立及求解的过程中,我们需要量取需要的点的坐标,尽管我们使用了 CAD 的坐标量取功能,但仍在读取坐标等步骤难免出现误差,这部分误差会随着工作精细程度的增加而降低。3)系统误差。在选择插入方法的时候,我们考虑到连续可导性的要求,选择了三次样条插值,如果选用其他插值方法的话,结果又会有所差异。这种误差在改进插值方法后可以降低。5.2.表面积估计模型的建立及求解5.2.1.网格离散化由于该山体是一个极

13、不规则的空间立体曲面,而且除了等高线上的点的高程,其他高程我们并不知道。而该山体的边界条件处理也是极其复杂的,所以用连续性方法将曲面方程求出来再用积分的方法求出地表面积的分析解是不现实的。于是我们采用离散型方法,将平面地形图划分成若干个方格,将每个方格近似看做一个平面,从而可以用二维平面插值的方法和各部分累加求和的方法求出三维地形图和地表面积,这其实是一种数值近似算法的思想。考虑到该公园的面积相当大,并且消防站及火灾面积均相当大,我们没有必要求出地表面积及地形图的精确值,故我们将该森林公园划分为 51 51 个方形区域,每个网格大小约为 100m 100m.坐标系的建立及划分结果如图 4图 4

14、5.2.2 三维地形图的建立在仅已知地形图等高线的情况下,欲建立该景区的三维地形图,我们可以采用二元插值的方法。二元插值的思想与一元插值的基本思想一致,对原始数据点(x,y,z)构造函数求出插值点的数据。在此,我们在 x 方向和 y 方向均采用三次多项式插值。MATLAB 所编程序详见附录 2,运算的三维地形结果图见图 5图 5从以上三维地形图可以清楚的直观认识到该景区的地表形状,为后面的表面积估计模型和最佳灭火路线模型的建立提供了直观的认识。5.2.3 地表面积的估算在经过 5.2.1 的网格划分之后,每一块山体近似看作一个平面,该平面和水平面有一个夹角 ,如图 6,该斜平面的面积与 之在水

15、平面的投影面积 有关系:1S1S(5-1)2cos图 6整个景区的地表面积 S 可以由以下公式计算:(5-2)51cosiiS其中 S 为整个景区的地表面积为第 i 个网格的水平面投影面积,这里 =100m 100m=10000i i2m为第 i 个网格平面与水平面的二面角,其取值可以通过插值的方法求出来,由于取值太多,全部取值见附件。经过 EXCEL 的计算可以得出结果S=2663 10000=26.62Km5.2.4 误差分析在该景区地表面积的估计中,误差主要来自以下三个方面1) 的选取。 是根据线性插值的方法得来的,该运算过程将与实际情况出现偏ii差。2) 的运算。我们在知道 之后,再来

16、计算 tan 与 sec ,该过程的数据有效位i iii数将使结果出现误差。3)山体各网格平面为平面的假设。该山体的表面肯定为一个不规则三维曲面,我们将每一个网格假设成一个平面,将会导致误差。不过,总的来说,这些误差是不可避免的,并且该误差也是满足工程需求的。5.3 最佳路线模型的建立及求解5.3.1 网格点的高度值一个网格中有很多点,我们将其中心部分的高度近似看做该网格的平均高度,则一个平面则简化为一个“点” 。对于这些点的高度,可以用附录 2 的二维平面 MATLAB插值方法求得,表 2 摘录了 B 点所在的山的一部分高度,它表示的坐标范围为(16,41)到(26,51),单位为 m,完整

17、数据见附件。0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 55 60 65 65 650 0 45 55 59 59 80 85 85 85 8520 55 65 59 95 95 105 100 100 100 10055 65 59 100 110 100 125 140 150 150 15075 59 100 125 100 125 160 175 185 190 19059 100 1258 100 125 150 200 215 230 225 22559 110 100 125 150 215 230 250 260 285 27559 125 100 125

18、 150 230 255 265 285 300 30059 120 150 125 150 235 260 275 305 325 325表 2有了这些数据,我们就可以求出任意两点的空间距离。5.3.2 相邻网点的空间距离附件中的“高度”文件中中表示了任意网点 i 的高度,这是一个 51 51 的矩阵,不妨记为 A,我们需要由此求出任意相邻两点的空间距离(为了计算方便,我们在容许误差的情况下,假设路线仅沿 X、Y 方向) ,这是一个 2601 2601 的矩阵,不妨记为B。 对于编号转换的问题,我们采用先行后列的方法,即将 A 矩阵中的点(a,b)记为B 矩阵中的第 个点(n 为矩阵的列数,

19、此处为 51) 。abB 中的第 i 个点在 A 中对应的行标 和列标 分别为:xiyi(5-3)1xin(5-4)()%y其中 n 为矩阵 A 的列数,此处为 51。X表示对 X 向下取整,如5.9=5,-3.2=-4。表示 Y 除 X 的余数。%由勾股定理可知,B 矩阵中任意元素(5-5)2,()10xyxyijijBA其中 、 分别为矩阵 A 中点 , 的值,xyiA,xyj (、 、 、 的计算见式(5-3) (5-4)100 为两相邻网格点的距离,单位为 m,由假设 6 的方向正交性假设可知, 很多元素为无穷大 inf 和 0,其中既不为 0ij也不为 inf 的点必须满足以下四条之

20、一: 0;xyjijin ;1yxjiji故 B 矩阵为一个大型稀疏矩阵,已知高度矩阵 A,生成距离权重矩阵 B 的 C+程序见附录 3,其结果为一个 2601 2601 的矩阵,该矩阵详见附件。5.3.3 最短路径的确定在将网格简化为点,其中的距离看做一个权重之后,整个图便成了一个无向图,于是我们可以采用图论中的最短路径的算法来求出从 A 点到 B 点的最短路径。最短路径的算法一般有两种,Floyd 算法和 Dijkstra 算法,我们将在 C+编程的基础上采用后者。下面我将介绍一下 Dijkstra 算法。Dijkstra 算法: =0, L(v)= , , , ,转;0()u0u0Si对

21、每一 用 代替 ,设 为 中最小者iSvWiimnL1iuvL令 ,转;iSv11i若 则停止;若 则转。GV1Gi此时,每个顶点所标 L(v)即为到 u 的最短距离,此算法的复杂度为度为 ,2()ov(顶点数 v 的平方的一个同阶量) 。Dijkstra 算法不仅给出了两点之间的最短距离,而且由此可得到最短路线。利用 C+编程我们可以得到结果,详细编程程序见附录 4详细输出结果见附录 5,其主要结果如下:638(13, 26) - 689(14, 26) - 740(15, 26) - 791(16, 26) - 842(17, 26) - 893(18, 26) - 944(19, 26)

22、 - 995(20, 26) - 1046(21, 26) -1097(22, 26) - 1148(23, 26) - 1147(23, 25) - 1198(24, 25) - 1249(25, 25) - 1300(26, 25) - 1351(27, 25) - 1402(28, 25) - 1453(29, 25) - 1504(30, 25) - 1555(31, 25) - 1554(31, 24) - 1553(31, 23) - 1552(31, 22) - 1551(31, 21) - 1550(31, 20) - 1549(31, 19) - 1548(31, 18) -

23、 1599(32, 18) - 1650(33, 18) - 1649(33, 17) - 1700(34, 17) - 1699(34, 16) - 1698(34, 15) - 1749(35, 15) - 1748(35, 14) - 1747(35, 13) - 1746(35, 12) - 1745(35, 11) - 1744(35, 10) - 1743(35, 9) - 1794(36, 9) - 1845(37, 9) - 1896(38, 9) - 1947(39, 9) - 1998(40, 9) - 2049(41, 9)经计算知,该最短距离为 4567.00(百米)利

24、用 MATLAB 编程,将该路线直观表示在景点平面图上结果如图 7,其详细编程程序见附录 6图 7从上图 7 可知,从消防站到火灾发生点时,为了让时间最短,路程最短,需要翻越一座不高的山,从而使火灾损失降为最低。5.3.4 误差分析以上的模型难免带有误差,其误差主要来自于一下几个方面。1)方向正交性假设。我们为了合理的减少计算量,将消防员的路线假设为与X、Y 轴平行的直线,这样的结果难免与实际情况有所偏差,其路线稍显机械。2)速度匀速性假设。由于景区的山的坡度不大,我们假设消防员的运动速度为一个定值,这样的假设也会引起误差。3)网格平面性假设。由于真实的山体不会有如此规则的表面,这样的假设也会

25、引起误差。5.4 消防站选址模型的建立及求解一般说来,确定最佳消防站点的选择时,应假设一个消防站点,再将景区边缘点假设为着火点,求出该消防点到着火点的最长时间,再调整该消防站点的位置,使最大时间最小,这便是一个运筹学中的最大值最小化模型,不过该模型实际上是不可行的,因为据估算,该模型的复杂度达到了 1016,远远超出了普通计算机的运算能力,故我们将对该模型做以下简化。由于景区山上植被丰富,容易发生火灾,故我们假设火灾发生在山区部分,而且根据直观经验,我们将站点的选择范围限制于点矩形(26,21) , (28,21) , (26,29)(28,29)之内,然后利用第三问所给出的程序及结果,借用

26、C+编程,求得了不同消防站点的位置到各个可能的着火点的最长时间,移动站点的位置,求得了该时间的最小值。建立了“最大值最小化”优化模型,其编程详见 附录 7,其输出结果如下:如果在 1097 建立,距离和为 10184.00.如果在 1098 建立,距离和为 10071.00.如果在 1099 建立,距离和为 9957.00.如果在 1148 建立,距离和为 9882.00.如果在 1149 建立,距离和为 9771.00.如果在 1150 建立,距离和为 9657.00.如果在 1199 建立,距离和为 9578.00.如果在 1200 建立,距离和为 9471.00.如果在 1201 建立,

27、距离和为 9359.00.如果在 1250 建立,距离和为 9287.00.如果在 1251 建立,距离和为 9166.00.如果在 1252 建立,距离和为 9065.00.如果在 1301 建立,距离和为 8978.00.如果在 1302 建立,距离和为 8872.00.如果在 1303 建立,距离和为 8771.00.如果在 1352 建立,距离和为 9062.00.如果在 1353 建立,距离和为 8956.00.如果在 1354 建立,距离和为 8855.00.如果在 1403 建立,距离和为 9161.00.如果在 1404 建立,距离和为 9055.00.如果在 1405 建立,

28、距离和为 8954.00.如果在 1454 建立,距离和为 9239.00.如果在 1455 建立,距离和为 9133.00.如果在 1456 建立,距离和为 9032.00.如果在 1505 建立,距离和为 9339.00.如果在 1506 建立,距离和为 9233.00.如果在 1507 建立,距离和为 9132.00.所以应当建立在第 1303 个地点, 其距离和为 8771.00.该点在地形图上的直观表示如图 8:图 8六、模型评价6.1.模型特点1)该模型在确保精确的前提下,另辟蹊径,将平面划分为若干个网格,将连续性问题离散化,从而建立起图论中的最短路模型,并利用 MATLAB 和

29、C+强大的计算能力给出了解答。2)大型矩阵的处理是该模型的另一个特点,本文建立了诸如 51 51、2601 2601的大型矩阵,为了节约内存,加快处理速度,本文运用了 MATLAB 处理大型稀疏阵的能力。3)本文模型的解答过程中体现了队友熟练的 C+编程技巧,运用 C+编出了Dijkstra 算法,目标规划算法等多个程序。4)本文建立的插值模型、最短路模型以及规划模型均具有一定的可扩展性,而应用于其他领域。6.2 模型缺点1)该模型的假设过多,比如速度均匀性假设、山体表面光滑性假设,这些假设导致了一些系统误差。2)由于计算机运算能力的限制,第四个模型并没有将所有点当做消防站的候选地址进行扫描选

30、择。七、参考文献1 陈汝栋,于延荣,数学模型与数学建模,北京:国防工业出版社,2006 年 1月.2 韩中庚,数学建模竞赛,北京:科学出版社,2008 年 4 月.3 刘峰,数学建模,南京:南京大学出版社,2005 年 9 月.4 郑阿奇,MATLAB 实用教程,北京:电子工业出版社,2007 年 1 月.附录 1:利用 MATLAB 对等高线进行一维三次样条插值subplot(2,3,1) %将图放在第一个子图中x=22 20 19 18 15 13 12;y=30 31 32 33 35 36 37; %输入x,y的对应坐标xi=12:0.02:22 %输入需要插值的点yi=interp1

31、(x,y,xi,spline);%选择插值方式为 “三次样条插值”plot(x,y,o,xi,yi,r.) %将原始数据和插值数据绘制在一个子坐标图中,颜色为黄色,线性为subplot(2,3,2)x=22 24 26 28;y=33 33 33 33;xi=22:0.02:28yi=interp1(x,y,xi,spline)plot(x,y,o,xi,yi,r.)subplot(2,3,3)y=43 38 36 35 34;x=15 16 17 19 21;xi=34:0.05:43yi=interp1(x,y,xi,spline)plot(x,y,o,xi,yi,r.)subplot(2

32、,3,4)x=17 19 24 26;y=37 36 35 35;xi=17:0.02:26yi=interp1(x,y,xi,spline)plot(x,y,o,xi,yi,r.)subplot(2,3,5)x=26 24 22 20 18 17;y=35.5 35.5 36 37 38 41;xi=17:0.02:26yi=interp1(x,y,xi,spline)plot(x,y,o,xi,yi,r.)subplot(2,3,6)x=26 24 22 20 19;y=36.5 36.5 37 38 40;xi=19:0.02:26yi=interp1(x,y,xi,spline)plo

33、t(x,y,o,xi,yi,r.)附录 2.利用 MATLAB 对曲面进行二维插值x=50:100:5050 y=50:100:5050z=; %此处输入已知点的高度矩阵,由于数据较多,该部分数据详见附件mesh(x,y,z) %画出原来数据的网格图xi=linspace(1,5050,100); %选择x方向上的插值点yi=linspace(0,5050,100); %选择y方向上的插值点xii,yii=meshgrid(xi,yi); %将插值点网格化zii=interp2(x,y,z,xii,yii,cubic); %选择三次多项式插值mesh(xii,yii,zii) % 绘制出插值后

34、的网格曲线附录 3.利用 MATLAB 生成 2601*2601 的空间距离矩阵a=input(请输入高度矩阵)n,m=size(a)b=zeros(m*n,m*n);for i=1:m*nfor j=1:m*nif i=jb(i,j)=0;elseif i-j=1|j-i=1|j-i=n|i-j=nb(i,j)=sqrt(a(floor(i-1)/m)+1,mod(i-1,m)+1)-a(floor(j-1)/m)+1,mod(j-1,m)+1)2+1002);elseb(i,j)=inf;endendendfor k=n:n:n*mb(k,k+1)=inf;b(k+1,k)=inf;end

35、b(:,n*m+1)=;b(n*m+1,:)=附录 4.基于 Dijkstra 算法用 C+编程求最短路径#include#include#include#include#includeusing namespace std;const int maxN = 2601 + 2;const int maxE = 2601 * 2601 + 2;struct nodeint v; double w;node *nxt;node *GmaxN; int N;node EmaxE; int nE;void init()nE = 0;memset(G, 0, sizeof(G);void add(int

36、 u, int v, int w)EnE.v = v; EnE.w = w;EnE.nxt = Gu;Gu = const double inf = 1e+15;double distmaxN;int pathmaxN;double spfa(int s, int t)queue q;bool tagmaxN;for(int i = 0; i nxt) if( (distu + e-w + 1e-9) v ) diste-v = e-w + distu;pathe-v = u;if( !tage-v ) tage-v = 1;q.push(e-v);int tmp = t;while( tmp

37、 != -1 ) printf(“ - %d(%d, %d)“, tmp, (tmp / 51) + 1, (tmp % 51) + 1);tmp = pathtmp;printf(“n“);return distt;int main()freopen(“data.out“, “r“, stdin);N = 2601; / 顶点个数init(); / 图的初始化过程double val;/ 读入 N * N 的矩阵for(int i = 0; i 689(14, 26) - 740(15, 26) - 791(16, 26) - 842(17, 26) - 893(18, 26) - 944(

38、19, 26) - 995(20, 26) - 1046(21, 26) -1097(22, 26) - 1148(23, 26) - 1147(23, 25) - 1198(24, 25) - 1249(25,25) - 1300(26, 25) - 1351(27, 25) - 1402(28, 25) - 1453(29, 25) - 1504(30, 25) - 1555(31, 25) - 1554(31, 24) - 1553(31, 23) - 1552(31, 22) - 1551(31, 21) - 1550(31, 20) - 1549(31, 19) - 1548(31,

39、 18) - 1599(32, 18) - 1650(33, 18) - 1649(33, 17) - 1700(34, 17) - 1699(34, 16) - 1698(34, 15) - 1749(35, 15) - 1748(35, 14) - 1747(35, 13)- 1746(35, 12) - 1745(35, 11) - 1744(35, 10) - 1743(35, 9) - 1794(36, 9) - 1845(37, 9) - 1896(38, 9) - 1947(39, 9) - 1998(40, 9) - 2049(41, 9)最短距离: 4567.00Proces

40、s returned 0 (0x0) execution time : 10.367 sPress any key to continue.附录 6.利用 MATLAB 生成最短路径图y=13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 31 31 31 31 31 31 31 32 33 33 34 34 34 35 35 35 35 35 35 35 36 37 38 39 40 41x=26 26 26 26 26 26 26 26 26 26 26 25 25 25 25 25 25 25 25 24 23 22 21 2

41、0 19 18 18 18 17 17 16 15 15 14 13 12 11 10 9 9 9 9 9 9 9x=x*10;y=y*10;pic=imread(.bmp);imshow(pic);hold on;text(x,y,*);附录 7.最优选址模型的 C+编程实现#include#include#include#include#includeusing namespace std;const int maxN = 2601 + 2;const int maxE = 2601 * 2601 + 2;struct nodeint v; double w;node *nxt;node

42、*GmaxN; int N;node EmaxE; int nE;void init()nE = 0;memset(G, 0, sizeof(G);void add(int u, int v, int w)EnE.v = v; EnE.w = w;EnE.nxt = Gu;Gu = const double inf = 1e+15;double distmaxN;int pathmaxN;double spfa(int s, int t)queue q;bool tagmaxN;for(int i = 0; i nxt) if( (distu + e-w + 1e-9) v ) diste-v

43、 = e-w + distu;pathe-v = u;if( !tage-v ) tage-v = 1;q.push(e-v);/*int tmp = t;while( tmp != -1 ) printf(“ - %d(%d, %d)“, tmp + 1, (tmp / 51) + 1, (tmp % 51) + 1);tmp = pathtmp;printf(“n“);*/return distt;int src27 = 1097,1098,1099,1148,1149,1150,1199,1200,1201,1250,1251,1252,1301,1302,1303,1352,1353,1354,1403,1404,1405,1454,1455,1456,1505,1506,1507;int dst5 = 1285,1625,2119,587,1316;int main()freopen(“data.out“, “r“, stdin);N = 2601; / 顶点个数init(); / 图的初始化过程double val;/ 读入 N * N 的矩阵for(int i = 0; i dd ) ans = dd; ret = srcs;printf(“n 所以应当建立在第 %d 个地点, 其距离和为 %.2lf.n“, ret, ans);return 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报