P1126機械人搬重物 洛谷

2021-08-21 19:12:43 字數 1629 閱讀 1796

機械人移動學會(rmi)現在正嘗試用機械人搬運物品。機械人的形狀是乙個直徑 $1.6 公尺的球。在試驗階段,機械人被用於在乙個儲藏室中搬運貨物。儲藏室是乙個 n×mn \times mn×m 的網格,有些格仔為不可移動的障礙。機械人的中心總是在格點上,當然,機械人必須在最短的時間內把物品搬運到指定的地方。機械人接受的指令有:向前移動 111 步(creep);向前移動2步(walk);向前移動 333 步(run);向左轉(left);向右轉(right)。每個指令所需要的時間為 111 秒。請你計算一下機械人完成任務所需的最少時間。

輸入格式:

第一行為兩個正整數 n,m(n,m≤50)n,m(n,m \le 50)n,m(n,m≤50) ,下面 nnn 行是儲藏室的構造, 000 表示無障礙, 111 表示有障礙,數字之間用乙個空格隔開。接著一行有 444 個整數和 111 個大寫字母,分別為起始點和目標點左上角網格的行與列,起始時的面對方向(東 eee ,南 sss ,西 www ,北 nnn ),數與數,數與字母之間均用乙個空格隔開。終點的面向方向是任意的。

輸出格式:

乙個整數,表示機械人完成任務所需的最少時間。如果無法到達,輸出 −1-1−1 。

輸入樣例#1:複製

9 10

0 0 0 0 0 0 1 0 0 0

0 0 0 0 0 0 0 0 1 0

0 0 0 1 0 0 0 0 0 0

0 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 1 0 0 0

0 0 0 0 0 1 0 0 0 0

0 0 0 1 1 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

1 0 0 0 0 0 0 0 1 0

7 2 2 7 s

輸出樣例#1:複製

12
這題讓我非常非常不爽,首先首先是題目,坑!(或者可能是我對資訊的理解處理能力又下降了吧orz)

1.這個機械人是個球圖中的那個圈表示它的大小(所以說題目中每個資訊都是有用的)

2.就是只能右轉左轉(不能後轉)

然後我一開始的**雖然a了但寫得奇醜無別,後面看了別人題解發現只要稍微改一下搜尋順序就會好很多

重點重點:一開始是先走再變方向,這樣要多寫if判斷,如果先轉方向所有的方向都會入隊,然後關於障礙,先從小的步走只要越界或者出格那麼可以直接break後面就不用看了,大概像這樣:

while(l!=r)

for(int i=0;i<=3;i++)//所有方向走一遍

}for(int i=1;i<=3;i++)

}

另外還有幾個小tip:

1.步數陣列a只要確定方向就行了,具體走幾步可以for迴圈再乘以a[i]

2.以後bfs的話感覺要寫多個if的是否可以更改一下搜尋順序呢?

洛谷P1126 機械人搬重物

機械人移動學會 rmi 現在正嘗試用機械人搬運物品。機械人的形狀是乙個直徑1.6公尺的球。在試驗階段,機械人被用於在乙個儲藏室中搬運貨物。儲藏室是乙個n m的網格,有些格仔為不可移動的障礙。機械人的中心總是在格點上,當然,機械人必須在最短的時間內把物品搬運到指定的地方。機械人接受的指令有 向前移動1...

洛谷P1126 機械人搬重物

機械人移動學會 rmi 現在正嘗試用機械人搬運物品。機械人的形狀是乙個直徑 1.6 公尺的球。在試驗階段,機械人被用於在乙個儲藏室中搬運貨物。儲藏室是乙個 n m 的網格,有些格仔為不可移動的障礙。機械人的中心總是在格點上,當然,機械人必須在最短的時間內把物品搬運到指定的地方。機械人接受的指令有 向...

洛谷P1126 機械人搬重物

機械人移動學會 rmi 現在正嘗試用機械人搬運物品。機械人的形狀是乙個直徑 1.6公尺的球。在試驗階段,機械人被用於在乙個儲藏室中搬運貨物。儲藏室是乙個n m的網格,有些格仔為不可移動的障礙。機械人的中心總是在格點上,當然,機械人必須在最短的時間內把物品搬運到指定的地方。機械人接受的指令有 向前移動...