第二屆“演算法控”馬拉松程式設計競賽 解題思路
前陣子在微博上看到了這個活動 第二屆“演算法控”馬拉松程式設計競賽
解一個NP-hard問題,比賽形式不錯,還有獎勵,果斷搞之
題目給出地鐵線路圖和換乘的站點以及等待時間,要求用最短的時間遍歷地鐵所有的站點。
這很像經典的TSP(Traveling Salesman Problem)問題,這個模型已經有很多智慧演算法可以解決了,我挑選了蟻群演算法,具體思路如下:
- 首先要把地鐵轉化成TSP的模型,由於地鐵有逆行正行還要考慮換乘時間,每個站點會有好幾個狀態(在幾號線,目前乘坐地鐵的方向),所以要進行拆點
- 首先把每個站點拆成正行a1,a2...an和逆行的b1,b2...bn,ai和bi(1<=i<=n)是雙向,時間為等待時間;ai可以到ai+1,bi+1可以到ai,時間就是地鐵的行駛時間。
- 由於上述拆點,每個換乘站都會被拆成好多個點,換乘點之間再連雙向邊,時間為換乘時間+等待時間
- 到此,我們的新圖就建立出來了,由於拆點並且換乘點被拆成了好多個,極限情況下的點數 = (換乘站數量 * 地鐵線數量 + 地鐵站數量 - 換乘站數量) * 2。也就是N = (70 * 20 + 300 - 70) * 2 = 3260
- 在拆點的過程中要將拆出來的點和原來的點的對應關係儲存起來,一來用於最後輸出解,二來我們遍歷的不是拆點後的每個點,而是實際的每個地鐵站
- 接下來算一個全域性最短路,求出每個點之間的最短路
- 模型轉化出來之後就可以用蟻群演算法(蟻群演算法的資料網上很多,就不再重複了)搞了,迭代一次的複雜度是螞蟻數量 * 地鐵站數量 * 拆點後的數量
比賽期間調了一下引數之後跑出的結果還是沒能達到很好的效果,於是我想著縮點:
將地鐵的換乘站和起止點標記為keyStation,然後將每條地鐵線中的keyStation之間的一些點縮成2個點,如地鐵線a<->b<->c<->d<->e<->f<->g,其中a和g是keyStation,那麼就可以縮點縮成a->f'->g和a<-b'<-g,然後a到f'的距離就是a到f的距離,並且f'這個點直接代表bcdef這5個站點,b'類似
雖然這個方法最後並沒有優化成更好的結果,不過可能是隨機演算法的不穩定的問題,anyway由於模型的特殊性,這個縮點方法可以很大程度的縮小地圖
程式碼發出來格式亂了,有興趣的朋友可以直接問我要notonlysuccess[at]gmail[dot]com
P.S 還差9兩銀子才能買一本圖靈社群裡看中的一本書,由於沒辦法直接用錢兌換銀子,求各路有銀子的大俠捧個錢場~~
相關文章
- 第二十屆西南科技大學ACM程式設計競賽(同步賽)ACM程式設計
- 華中農業大學第十三屆程式設計競賽 題解程式設計
- 第二屆“重科杯”重慶科技大學程式設計競賽(同步賽)ptlks的題解(2024.5.18)程式設計
- 2020 KCTF秋季賽 | 第二題設計及解題思路
- 第十屆山東省大學生程式設計競賽題解(A、F、M、C)程式設計
- 第15屆浙江省大學生程式設計競賽D題程式設計
- 牛客競賽,GDDU第十屆文遠知行杯新生程式設計競賽,摸魚記(BDEIKL題解,補G,ACFHJ)程式設計
- QZEZ第一屆“飯吉圓”杯程式設計競賽程式設計
- [補題] 第 45 屆國際大學生程式設計競賽(ICPC)亞洲區域賽(上海)程式設計
- 華中農業大學第十三屆程式設計競賽程式設計
- [題解][2021-2022年度國際大學生程式設計競賽第10屆陝西省程式設計競賽] Type The Strings程式設計
- 隨身雲資料探勘競賽解題思路
- 北京資訊科技大學第十一屆程式設計競賽(重現賽)I程式設計
- “九韶杯”河科院程式設計協會第一屆程式設計競賽題目分析以及總結程式設計
- 第十七屆中國計量大學程式設計競賽 I- Isolated Pointset程式設計
- 某大學程式設計競賽程式設計
- 第八屆山東省ACM大學生程式設計競賽總結ACM程式設計
- 山東省第七屆ACM大學生程式設計競賽-Reversed WordsACM程式設計
- 搞定程式設計競賽必知哪10個演算法?程式設計演算法
- 山東省第一屆ACM大學生程式設計競賽-Balloons(搜尋)ACM程式設計
- 2024 CCPC第五屆遼寧省程式設計競賽 集訓2程式設計
- 第 10 屆 CCPC 中國大學生程式設計競賽濟南站 遊記程式設計
- "華為杯"華南理工大學程式設計競賽(同步賽) H題解 還沒寫程式設計
- 2014第六屆華為創新杯程式設計大賽初賽解題報告程式設計
- M-災難預警-浙江農林大學第十九屆程式設計競賽暨天梯賽選拔賽程式設計
- 看雪·深信服 2021 KCTF 春季賽 | 第二題設計思路及解析
- 2020 KCTF秋季賽 | 第五題設計及解題思路
- 無錫學院2024年ACM大學生程式設計競賽校選賽 題解ACM程式設計
- 山東省第四屆ACM大學生程式設計競賽-Rescue The Princess(計算幾何)ACM程式設計
- 程式設計競賽中讀檔案技能程式設計
- 中國計量大學現代科技學院第四屆“中競杯”程式設計校賽(同步賽) F.爬塔(DP)程式設計
- 金色十月線上程式設計比賽第二題:解密程式設計解密
- 山東省第六屆ACM大學生程式設計競賽-Square Number(完全平方數)ACM程式設計
- 山東省第六屆ACM大學生程式設計競賽-Lowest Unique Price(桶排序)ACM程式設計排序
- 江蘇省第二屆資料安全技術應用職業技能競賽初賽WP
- 2012年"浪潮杯"山東省第三屆ACM大學生程式設計競賽(熱身賽)ACM程式設計
- 勝因沙龍 - 程式設計競賽(持續更新)程式設計
- 紹興市大學生程式設計競賽程式設計