這是咱們學校做爲校賽的一道題目,我來講一下我作這道題的基本思路和用到的方法。
第一題:從中心供水站A出發,自來水管道應該如何鋪設才能使管道的總里程最少?以圖形給出鋪設方案,並給出I型管道和II型管道總里程數。
首先,能夠當作是兩部分。中心供水站到12個一級供水站,還有就是12個一級供水站d到168個二級供水站。這裏我用的最小生成樹的算法。能夠用任何語言來算。我用的是MATLAB。由於,他有一個圖論工具箱能夠直接調用算法,不須要你本身在編寫。只須要帶入參數便可。先是計算各個供水站之間的距離。這個就用l兩點z之間的距離公式計算便可。第一步,讓中心供水站和12個一級供水站組成一個最小生成樹。運行結果就是最短的距離之和,也就是總的里程數。第二步,有多個一級點,也就是有多個源頭。咱們只須要再設一個點,讓這個點與12個一級供水站的距離爲0。這樣,就轉化爲了,一個源頭的問題。繼續調用最小生成樹算法。便可算出。第一問就這樣解完了。
第二題:因爲II型管道市場供應不足,急需減小從一級供水站出發鋪設的II型管道總里程,初步方案是將其中兩個二級供水站升級爲一級供水站。問選取哪兩個二級供水站,自來水管道應該如何鋪設才能使鋪設的II型管道總里程最少?相對問題1的方案,II型管道的總里程減小了多少千米?
將一個二級點轉化爲一級點,這樣只需重複上一題,將這個要升級的點與設的點的距離設爲0,再次調用最小生成樹算法,就可算出總里程數。依次,算出所有的點。而後,取最小的兩個點。這兩個點就是要升級的點。而後與原來的作差便可得出。
第三題:在問題1基礎上,假如現實中因爲功率的影響,從一級供水站出發鋪設的管道最多隻能供水40千米(按從該一級供水站管道輸送的總里程計算),但從中心供水站A出發鋪設的管道供水不受此距離限制。爲實現對全部供水站供水,須要將若干個二級供水站升級爲一級供水站,但升級後從該供水站出發鋪設的管道也最多隻能供水40千米。問最少升級幾個二級供水站,可實現對全部的供水站供水?在這種配置下鋪設管道的總里程數最少是多少千米?
第三問:屢次利用最小生成樹算法,算出不可能的點。而後再用循環,求得距離最短。
等我比賽結束,會把論文發出來供你們參考。以後我會詳細的更新如何找資料,如何學習,如何入門。
算法