这是咱们学校做为校赛的一道题目,我来讲一下我作这道题的基本思路和用到的方法。
第一题:从中心供水站A出发,自来水管道应该如何铺设才能使管道的总里程最少?以图形给出铺设方案,并给出I型管道和II型管道总里程数。
首先,能够当作是两部分。中心供水站到12个一级供水站,还有就是12个一级供水站d到168个二级供水站。这里我用的最小生成树的算法。能够用任何语言来算。我用的是MATLAB。由于,他有一个图论工具箱能够直接调用算法,不须要你本身在编写。只须要带入参数便可。先是计算各个供水站之间的距离。这个就用l两点z之间的距离公式计算便可。第一步,让中心供水站和12个一级供水站组成一个最小生成树。运行结果就是最短的距离之和,也就是总的里程数。第二步,有多个一级点,也就是有多个源头。咱们只须要再设一个点,让这个点与12个一级供水站的距离为0。这样,就转化为了,一个源头的问题。继续调用最小生成树算法。便可算出。第一问就这样解完了。
第二题:因为II型管道市场供应不足,急需减小从一级供水站出发铺设的II型管道总里程,初步方案是将其中两个二级供水站升级为一级供水站。问选取哪两个二级供水站,自来水管道应该如何铺设才能使铺设的II型管道总里程最少?相对问题1的方案,II型管道的总里程减小了多少千米?
将一个二级点转化为一级点,这样只需重复上一题,将这个要升级的点与设的点的距离设为0,再次调用最小生成树算法,就可算出总里程数。依次,算出所有的点。而后,取最小的两个点。这两个点就是要升级的点。而后与原来的作差便可得出。
第三题:在问题1基础上,假如现实中因为功率的影响,从一级供水站出发铺设的管道最多只能供水40千米(按从该一级供水站管道输送的总里程计算),但从中心供水站A出发铺设的管道供水不受此距离限制。为实现对全部供水站供水,须要将若干个二级供水站升级为一级供水站,但升级后从该供水站出发铺设的管道也最多只能供水40千米。问最少升级几个二级供水站,可实现对全部的供水站供水?在这种配置下铺设管道的总里程数最少是多少千米?
第三问:屡次利用最小生成树算法,算出不可能的点。而后再用循环,求得距离最短。
等我比赛结束,会把论文发出来供你们参考。以后我会详细的更新如何找资料,如何学习,如何入门。
算法