題目:一類似於蜂窩的結構的圖,進行搜尋最短路徑(要求5 分鐘)
尋找蜂窩上兩個節點之間的最短路徑,
1、如果用dijkstra演算法,首先得把無限的蜂窩圖(因為是通訊網的蜂窩,理論上是無限覆蓋的)做個限制,否則一直迴圈
圖的算法學的很差,借鑑乙個網友的寫法,裡面包含了建圖——搜尋——最短路徑
2、貪心法
根據蜂窩圖的特點,每個節點
都只有三條出路:橫向、與斜著的上、下方向。
根據最短路徑的子問題重複特點,即,在一條最短路徑中,中間經過的節點到目標的最短路徑即已包含在這條最短路徑中。在蜂窩結構中,它看起來符合貪心規則:從當前點出發,比較三條可選路徑,首先橫向座標(x軸)中,能接近目標點的路徑(這裡先選y軸也一樣),如果有兩條路徑在x方向上接近目標的距離一樣,那麼再比較y軸。不過要注意兩兩種特殊情況:源與目標在同一x軸或y軸上,這時,會發生兩條路徑等價的情況,任選一條即可。
微軟100題(9) 二叉搜尋樹的後序遍歷
題目 判斷整數序列是不是二元查詢樹的後序遍歷結果 題目 輸入乙個整數陣列,判斷該陣列是不是某二元查詢樹的後序遍歷的結果。如果是返回true,否則返回false。例如輸入5 7 6 9 11 10 8,由於這一整數序列是如下樹的後序遍歷結果 8 6 10 5 7 9 11 因此返回true。如果輸入7...
微軟等資料結構與演算法面試100題 第五題
第五題 查詢最小的k個元素 題目 輸入n個整數,輸出其中最小的k個。例如輸入1,2,3,4,5,6,7和8這8個數字,則最小的4個數字為1,2,3和4。分析 本題目要求計算n個整數的最小的k個,題目沒有直接給出複雜度的要求,因此有很多種解法。比如排序後一次輸出等 很多種解法。如果是要求複雜度為klo...
微軟等資料結構與演算法面試100題 第七題
第七題 微軟亞院之程式設計判斷倆個鍊錶是否相交 給出倆個單向鍊錶的頭指標,比如h1,h2,判斷這倆個鍊錶是否相交。為了簡化問題,我們假設倆個鍊錶均不帶環。問題擴充套件 1.如果鍊錶可能有環列?2.如果需要求出倆個鍊錶相交的第乙個節點列?分析 實現 includeusing namespace std...