洛谷 P1126 機械人搬重物 搜尋

2021-09-12 09:07:07 字數 1889 閱讀 8371

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

輸入格式:

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

輸出格式:

乙個整數,表示機械人完成任務所需的最少時間。如果無法到達,輸出-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
這題很陰......我拿小號提交了快20次......一直30、50、60、70、90分,就是a不了!

首先要轉成點圖,因為障礙物是在格仔上的,而機械人在點上。注意邊界不可以走,因為機械人本身是有半徑的。

還有一點就是方向和下一步要走的似乎要對應,不然60分。

另外機械人本身是否在終點還有特判一次......

其實本題很考驗碼力,細節處理的也有很多。(我寫了122行)

#include #include #include #include using namespace std;

typedef struct

lxydl;

int a[56][56],squ[56][56],n,m,s,inx,iny,outx,outy;

queueque;

int tox[4]=,toy[4]=;//下乙個點一定要和td方向陣列對應!!我之前一直30、50、60分

int td[4]=;

char direc;

inline bool check(int x,int y)

return 0;

}signed main()

} }cin>>inx>>iny>>outx>>outy>>direc;

lxydl position;

if(inx==outx && iny==outy)//特判一下,節省時間

*/ que.push(position);}}

}} que.pop();

} if(squ[outx+1][outy+1]==0)//注意要+1

else

return 0;

}

洛谷P1126 機械人搬重物

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

洛谷P1126 機械人搬重物

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

P1126機械人搬重物 洛谷

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