背景:對於有些問題沒有好的算法去求解,只能通過遍歷搜索的方式尋找可行解,此時就用到了寬度優先搜索和深度優先搜索。深度優先搜索用棧實現,可以利用系統的棧區遞歸調用,也可以自己維護好結構。一般來說,自己維護棧對空間的把握更準確一些,而且調試也更方便一些。不過遞歸調用的方式有時確會寫出很漂亮的代碼,深度搜索隨着問題規模增加時間開銷會顯著增加,此時必須通過一些剪枝技術來進行優化。寬度優先搜索用隊列來實現,隨問題規模增加空間開銷會顯著增加。
題意:給出棋盤行列數,求從(1,1)點能否遍歷整個棋盤,能順序打印路徑,不能則打印"impossible"
注意:
1、行是數字, 列是字母。輸出答案要進行排序,先字母非降序,再數字非降序。這要求方向數組數據有次序,這樣遍歷結果自然有序。
2、行、列的範圍是1到26.
3、每組輸出前都有"Scenario #id:",輸出結束要有回車。不能打印"impossible",能的話順序打印路徑並且按照先字母再數字的次序。
示意圖:
源代碼: