算法實踐:滾石柱

滾石柱

描述

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-v1pJ6ZT3-1588219584638)(C:\Users\HUAWEI\AppData\Roaming\Typora\typora-user-images\image-20200430101403033.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-2AC6wQn9-1588219584639)(C:\Users\HUAWEI\AppData\Roaming\Typora\typora-user-images\image-20200430101420525.png)]

迷宮是一個N行M列的矩陣,每個位置可能是硬地(用”.”表示)、易碎地面(用”E”表示)、禁地(用”#”表示)、起點(用”X”表示)或終點(用”O”表示)。

在每一步操作中,可以按上下左右四個鍵之一。

按下按鍵之後,石柱向對應的方向沿着棱滾動90度。

任意時刻,長方體不能有任何部位接觸禁地,並且不能立在易碎地面上。

字符”X”標識長方體的起始位置,地圖上可能有一個”X”或者兩個相鄰的”X”。

地圖上唯一的一個字符”O”標識目標位置。

求把石柱移動到目標位置(即立在”O”上)所需要的最少步數。

在移動過程中,”X”和”O”標識的位置都可以看作是硬地被利用。

輸入

輸入包含多組測試用例。

對於每個測試用例,第一行包括兩個整數N和M。

接下來N行用來描述地圖,每行包括M個字符,每個字符表示一塊地面的具體狀態。

當輸入用例N=0,M=0時,表示輸入終止,且該用例無需考慮。

3≤N,M≤500

輸出

每個用例輸出一個整數表示所需的最少步數,如果無解則輸出”Impossible”。

每個結果佔一行。

輸入樣例

7 7
#######
#..X###
#..##O#
#....E#
#....E#
#.....#
#######
0 0

輸出樣例

10

題解

如何設計數據結構?

在每一步操作中,可以按上下左右四個鍵之一

按下鍵後,石柱向對應的方向沿着棱滾動90度

如何設計石柱的狀態轉移函數!

任意時刻,長方體不能有任何部位接觸禁地,並且不能立在易碎地上

-------如何設計isvalid()函數

字符‘x’標識長方體的起始位置,地圖上可能有一個‘X’或者兩個相鄰的’X‘

-------如何表示Start點

地圖上唯一的一個字符’O‘標識目標位置

-------Target點如何表示

求石柱移動到目標位置(即立在’O‘上)所需的最小步數

-------結束狀態如何表示

在移動過程中,'X’和’O’b標識的位置可以看成硬地來使用

--------如何更新地圖

石柱採用三元主(X,Y,Status)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-4BVxDEP1-1588219584641)(C:\Users\HUAWEI\AppData\Roaming\Typora\typora-user-images\image-20200430102633811.png)]

(X,Y) 表示石柱的基座標

Status: 0表示站立,1表示橫躺,2表示豎躺

(X,Y,Status狀態轉移表)

在這裏插入圖片描述

難度

高,BFS

代碼

code by andy
在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章