2017年7月17日 星期一

[UVA] 1610 - Party Games

題目連結
題目說明:
給偶數個字串,要輸出一個最短字串 S 可以滿足一半的字串小於等於S,一半大於S。
例如:
D A ABC AD
要輸出AC
==================================================
我的作法:
先將全部字串排序。
接著找到最中間兩個字串出來,分別為key1, key2,
 對key1字串的每個字元從[0]開始試著+1,如果 < key2就直接break;
如果key1[i]是字元Z不能+1,所以就continue;看下一個字元。
==================================================
程式碼:

2017年7月15日 星期六

[UVA] 816 - Abbott's Revenge

題目連結
題目說明:
給定一個9*9的迷宮,給一起點和終點,起點有給起始方向,求最短路徑。
迷宮的每一個點有給固定的條件只能往哪邊走,
例如:
2 3 SFR EL *
就是指當拜訪到(2, 3)這個點若是往S(南邊)則只能往前走或往右走,
如果是往E(東邊)則只能往左走。
==============================
我的作法:
因為到每個點都需要考慮往哪個方向應該往哪邊走,
我直接將每一個點都設置NESW四個方位,重新定義點與點之間的連線,
例如下圖中藍線就是點與點可以走的路,[1]→[40]就是1可以走到40,依此類推。
起點的位置需要注意,若測資是3 1 N 3 3,從3 1位置往N走,所以起點是2 1哦!
終點的位置因為有4個方向所以有4個,4個都當終點跑一次,找到最短的才是答案。
接下來就可以快樂地用BFS,有起點,有終點,求最短路徑不是夢!
需要注意的幾個點是:

  • 最後要記得補上真的起點。
  • BFS判斷是否有解可以看兩點
    • 起點終點同一個 => 有解
    • 路徑在儲存的時候>1個 => 有解

==============================
程式碼: