路徑規劃問題

學習語言真的是件很痛苦的事,入門感覺很簡單,寫個hello world 很簡單,但是想解決點東西,真的是太難了,於是樓主想針對已知問題,去看別人的代碼,看看別人是怎麼想的,學會了別人的方法再扒光別人的代碼,多扒扒,多練練就可以學會了。上篇路徑規劃問題是圖裏面一個很麻煩的東西,博主搞了看了比較多的文章還是稍微有點收穫的。

上面是個路徑規劃問題,起點S,終點E,必須經過點N7,N12,必須經過邊(N2,N4),(N14,N13),不能經過邊(N11,N12),邊上的數字就是距離。問如何走使得路徑最短。


之前說過這個單源的無向加權路徑問題需要用dijkstra方法,其實就是根據起點開始一圈一圈的向外訪問將路徑的和加權至每個節點,遇到重疊點就開始比較大小。但是本體有很多約束,譬如過某點,過某條路徑,如果從結果中再次塞選符合這些約束的路徑應該會大量浪費時間。看了其他人的決絕辦法是,先將這些約束進行排序,每條邊其實就是路徑上相鄰的兩個點,對這些點排序得到的幾種路徑分成很多小段,判斷自己定義小路徑兩個點是否相連,若相連就直接等於權值,否則需要對每一小段進行dijkstra路徑搜索。

將路徑的加權和得出將結果。


因爲代碼不是原創,博主就不復制粘貼別人的了,等着博主再次看看什麼其他的解決辦法模型,自己編個程序再貼上來。博主總結這次代碼中所學到的c++的收穫


map  ,  set   , pair   ,這幾個東西很像,map和set就是一對一映射,他們有個mutlimap,multiset ,就是一對多映射,map可以不同類型的映射,set只能相同類型映射,一看到這裏樓主想到了嘻哈表 hash  ,沒記錯也是這樣的,pair可以儲存成map或者set的一個數據。對了 < vector <vector <int>>則類似一個二維數組,但是他的功能絕對不是數組可以媲美的,不好了樓下的大爺上來催了,不寫了下次繼續分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章