NYOJ306 走迷宮(dfs+二分搜索)
Dr.Kong設計的機器人卡多非常愛玩,它常常偷偷跑出實驗室,在某個游樂場玩之不疲。這天卡多又跑出來了,在SJTL游樂場玩個不停,坐完碰碰車,又玩滑滑梯,這時卡多又走入一個迷宮。整個迷宮是用一個N * N的方陣給出,方陣中單元格中填充了一個整數,表示走到這個位置的難度。
這個迷宮可以向上走,向下走,向右走,向左走,但是不能穿越對角線。走迷宮的取勝規則很有意思,看誰能更快地找到一條路徑,其路徑上單元格最大難度值與最小難度值之差是最小的。當然了,或許這樣的路徑不是最短路徑。
機器人卡多現在在迷宮的左上角(第一行,第一列)而出口在迷宮的右下角(第N行,第N列)。
卡多很聰明,很快就找到了這樣的一條路徑。你能找到嗎?
輸入
有多組測試數據,以EOF為輸入結束的標志
第一行: N 表示迷宮是N*N方陣 (2≤ N≤ 100)
接下來有N行, 每一行包含N個整數,用來表示每個單元格中難度 (0≤任意難度≤120)。
輸出
輸出為一個整數,表示路徑上最高難度與和最低難度的差。
樣例輸入
5
1 1 3 6 8
1 2 2 5 5
4 4 0 3 3
8 0 2 3 4
4 3 0 2 1
樣例輸出
2
題目分析:
對於每一個答案的范圍,dfs判斷對於當前范圍值是否能否從(1,1)到達(n,n)。如果能找到某一路徑到達(n,n),則證明當前答案能夠滿足要求,還可以繼續減小。我們可以二分[0,max-min]之間的值,進行判斷即可。
AC代碼:
/**
*@xiaoran
*dfs+二分搜索
*迷宮可以向上走,向下走,向右走,向左走
*從(1,1)到(n,n)能否找到一條路徑,
*其路徑上單元格最大難度值與最小難度值之差是最小的
*/
#include
#include
#include