華為優招面試題---迷宮問題

鐺鐺鐺鐺Huan發表於2017-07-15

昨天參加了華為優招,被問到一道演算法題,當時,有點思路,記得不論是在人工智慧課還是在演算法課上,這些都有講到過,然後想了好久,回答出來了不是一個最優解的答案。下來總結一下這道題的思路。

題目

有一個迷宮,裡面有障礙物,最左上角是入口,右下角是出口,請找出一條路徑可以走出迷宮。大致就像下面這個圖(陰影部分表示有障礙物):
這裡寫圖片描述

如何找到一條從入口通往出口的路徑?

思路

當時的想法:按照我們走迷宮的思路一樣,判斷當前位置的可走的方向有一個還是多個,如果有一個方向可走,那沒有別的選擇,前進;如果有多個方向可走,就先選一條去走,並把這個位置設一個標記;如果各個方向不可走回退,退到最近的設了標記的位置上。這樣一次次迴圈就可以找到一條路徑。

接著面試官問,這個想法這樣想很簡單,那有沒有想過如何去實現?(資料結構這些如何去設計)

我回答可以用樹來表示,像下面這樣:
這裡寫圖片描述

有路徑就擴充套件樹節點;沒有路徑就表示該節點不能再擴充套件,也就是沒有路可走的情況。如果沿著樹去遍歷,擴充套件到了一個沒有子孩子的節點時,就需要再回溯,回溯到上一個有標記的節點,繼續其他分支的擴充套件。這種應該算是樹的深度優先遍歷,但這樣是不能找到最優路徑的,有可能找出來的是最長的。如何去找最優路徑沒有回答上來,面試官提了一下,可以用廣度優先遍歷(BFS)來做,這樣得到的應該就是最短路徑。

總結

這次面試在演算法和資料結構上還是比較欠缺,所以不管什麼語言,不管什麼崗位,對於演算法和資料結構還是要求要掌握的,所以下來也需在這方面努力!加油!希望找到滿意的工作!

相關文章