Q: http://poj.org/problem?id=2632

 

這題寫了很久

最主要是卡在座標轉換那邊

 

想法是將一個robot令成一個structure

分別紀錄robot目前的座標和方位

然後將其標記在自訂的地圖(2維陣列)上

如果內容為0則表示沒有robot在此座標,否則就將內容設為robot的id (ex. robot 1就將內容設成1)

但是因為地圖的座標和robot本身的座標不同(題目定的)

如果地圖為5行4列

則robot的座標為

(1,4)  (2,4)  (3,4)  (4,4)  (5,4)

(1,3)  (2,3)  (3,3)  (4,3)  (5,3)

(1,2)  (2,2)  (3,2)  (4,2)  (5,2)

(1,1)  (2,1)  (3,1)  (4,1)  (5,1)

 

但是我自訂的地圖因為是使用2維陣列的關係

所以如果是5行4列,地圖的座標就變成

(1,1)  (1,2)  (1,3)  (1,4)  (1,5)

(2,1)  (2,2)  (2,3)  (2,4)  (2,5)

(3,1)  (3,2)  (3,3)  (3,4)  (3,5)

(4,1)  (4,2)  (4,3)  (4,4)  (4,5)

 

結果為了做座標轉換,耗費了我不少時間orz

 

最後用一個函式去模擬robot移動的情況

如果指令為"移動",則先判斷會不會撞牆or撞到別的robot

如果會,則發生crash的情形,印出答案後直接跳出函式

如果都不會,則做出移動的動作,更改robot的座標

然後將地圖做類似refresh的動作

並繼續下一輪的移動(recursive),直到repeat歸零為止

 

如果指令為左轉or右轉

則直接改變robot的方位即可

左轉的話就按照北-->西-->南-->東的順序,以repeat的次數為基礎,直接計算並更改robot的方位

右轉的話則相反

 

指令全部執行完如果都沒有crash則印出ok

但是有一點要注意

就是如果在全部的指令讀完之前就發生crash的情況的話

則必須記得將剩下的指令先吸收完,才能進入下一輪的測資

要不然整個input會亂掉,導致執行結果不正確

 

 

 

arrow
arrow
    文章標籤
    ACM POJ 程式 recursive
    全站熱搜

    Tube 發表在 痞客邦 留言(0) 人氣()