我認爲你可以這樣做,首先找到所有可用0向右轉動的點。然後右轉一圈,依此類推。你可以使用一個隊列來做到這一點。請注意,在第n階段,您可以針對n個右轉可達到的所有點獲得最佳解決方案。更重要的是,任何尚未到達的點都可以達到n點或根本不可達。爲了達到最佳的時間複雜度,您必須使用這樣一個事實,即您只需要從那些到達的點開始搜索新的可到達點,這些點在適當的方向上有一個未到達的鄰居。由於每個點只有4個鄰居,你只能從中搜索4次。您可以通過爲每個方向維護一個單獨的列表來實現它,該列表包含所有到達的點,並且在該方向上有一個未到達的鄰居。這給你一個與迷宮面積成正比的時間複雜度,它與輸入數據的大小成正比。
下面我提出一個圖形化的例子:
. . . . . . (0) . . . . . 0 1 1 1 1 (1) 0 1 1 1 1 1
. ####### . . 0 ########## . 0 ########## . 0 ########## 2
. # . # . . 0 # . # . . 0 # . # . . 0 # . # . (2)
. # . . . . 0 # . . . . 0 # . . . . 0 # . . . (2)
. #### . # . 0 #### . # . 0 #### . # . 0 #### . # 2
(.) . . . . . (0) . . . . . 0 1 1 1 1 1 0 1 1 1 1 1
0 1 1 1 1 1 0 1 1 1 1 1
0 ########## 2 0 ########## 2
0 # . # 3 2 0 # 4 # 3 2
0 # (3) 3 3 2 0 # 3 3 3 2
0 #### . # 2 0 #### 4 # 2
0 1 1 (1) 1 1 0 1 1 1 1 1
()
分別表示已與相應的鄰居未得點
你能提供有關如何工作的一些細節?你是否允許儘可能多地探索迷宮,但是必須以最少的轉數產生最佳解決方案?或者你花時間探索迷宮尋找解決方案的次數?你可以假設迷宮? – templatetypedef 2011-04-09 22:44:51
我想你知道迷宮。 – ysdx 2011-04-09 23:33:07