百练#2802小游戏
描述
一天早上,你起床的時候想:“我編程序這么牛,為什么不能靠這個賺點小錢呢?”因此你決定編寫一個小游戲。
游戲在一個分割成w * h個正方格子的矩形板上進行。如圖所示,每個正方格子上可以有一張游戲卡片,當然也可以沒有。
當下面的情況滿足時,我們認為兩個游戲卡片之間有一條路徑相連:
路徑只包含水平或者豎直的直線段。路徑不能穿過別的游戲卡片。但是允許路徑臨時的離開矩形板。下面是一個例子:
這里在 (1, 3)和 (4, 4)處的游戲卡片是可以相連的。而在 (2, 3) 和 (3, 4) 處的游戲卡是不相連的,因為連接他們的每條路徑都必須要穿過別的游戲卡片。
你現在要在小游戲里面判斷是否存在一條滿足題意的路徑能連接給定的兩個游戲卡片。
輸入
輸入包括多組數據。一個矩形板對應一組數據。每組數據包括的第一行包括兩個整數w和h (1 <= w, h <= 75),分別表示矩形板的寬度和長度。下面的h行,每行包括w個字符,表示矩形板上的游戲卡片分布情況。使用‘X’表示這個地方有一個游戲卡片;使用空格表示這個地方沒有游戲卡片。
之后的若干行上每行上包括4個整數x1, y1, x2, y2 (1 <= x1, x2 <= w, 1 <= y1, y2 <= h)。給出兩個卡片在矩形板上的位置(注意:矩形板左上角的坐標是(1, 1))。輸入保證這兩個游戲卡片所處的位置是不相同的。如果一行上有4個0,表示這組測試數據的結束。
如果一行上給出w = h = 0,那么表示所有的輸入結束了。
輸出
對每一個矩形板,輸出一行“Board #n:”,這里n是輸入數據的編號。然后對每一組需要測試的游戲卡片輸出一行。這一行的開頭是“Pair m: ”,這里m是測試卡片的編號(對每個矩形板,編號都從1開始)。接下來,如果可以相連,找到連接這兩個卡片的所有路徑中包括線段數最少的路徑,輸出“k segments.”,這里k是找到的最優路徑中包括的線段的數目;如果不能相連,輸出“impossible.”。
每組數據之后輸出一個空行。
樣例輸入
5 4
XXXXX
X X
XXX X
XXX
2 3 5 3
1 3 4 4
2 3 3 4
0 0 0 0
0 0
樣例輸出
Board #1:
Pair 1: 4 segments.
Pair 2: 3 segments.
Pair 3: impossible.
思路難點就是確定路徑長度,使用一個二維數組記錄方向(下標為方向,內容為xy方向上的變化),遞歸函數參數為:當前位置,當前路徑長度以及方向。
WA4次:
1.每組數據輸出一個空行!
2.坐標搞錯了xy坐標搞混…無語。
總結
以上是生活随笔為你收集整理的百练#2802小游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员要失业了… 输入图片,输出代码,一
- 下一篇: 刚刚! 2019年区块链报告: 用小程序