Given a graph G = (V, E), where every edge e has a nonnegative weight w(e), and a source vertex s in V, find the shortest path from s to every other vertex
本書是Brian W. Kernighan和Rob Pike合著的最新力作。本書從排錯、測試、性能、可移植性、設計、界面、風格和記法等方面,討論了程序設計中實際的、又是非常深刻和具有廣泛意義的思想、技術和方法,它的翻譯出版將填補國內目前這方面書籍的空白。本書值得每個夢想并努力使自己成為優秀程序員的人參考,值得每個計算機專業的學生和計算機工作者閱讀,也可作為程序設計高級課程的教材或參考書。
算法框架:
a.. 問題的解空間:應用回溯法解問題時,首先應明確定義問題的解空間。問題的解空間應到少包含問題的一個(最優)解。
b. 回溯法的基本思想:確定了解空間的組織結構后,回溯法就從開始結點(根結點)出發,以深度優先的方式搜索整個解空間。這個開始結點就成為一個活結點,同時也成為當前的擴展結點。在當前的擴展結點處,搜索向縱深方向移至一個新結點。這個新結點就成為一個新的活結點,并成為當前擴展結點。如果在當前的擴展結點處不能再向縱深方向移動,則當前擴展結點就成為死結點。換句話說,這個結點不再是一個活結點。此時,應往回移動(回溯)至最近的一個活結點處,并使這個活結點成為當前的擴展結點。回溯法即以這種工作方式遞歸地在解空間中搜索,直至找到所要求的解或解空間中已沒有活結點時為止。
(3). 運用回溯法解題通常包含以下三個步驟:
a. 針對所給問題,定義問題的解空間;
b. 確定易于搜索的解空間結構;
c. 以深度優先的方式搜索解空間,并且在搜索過程中用剪枝函數避免無效搜索;