luogu P1126 機械人搬重物

2021-09-27 15:51:20 字數 2445 閱讀 3300

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

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

輸出格式

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

#include

#include

#include

#include

#include

#include

using

namespace std;

struct status

}temp;

int n,m,tmp,tx,ty;

const

int n=60;

const

int m=60;

bool map[n]

[m];

char

right

(char d)

return0;

}char

left

(char d)

return0;

}void

bfs()if

(s.count

(temp)

)continue

;else

s.insert

(temp)

;

temp.d=

right

(temp.d);if

(!s.

count

(temp)

) q.

push

(make_pair

(temp , now.second+1)

); temp=now.first;

temp.d=

left

(temp.d);if

(!s.

count

(temp)

) q.

push

(make_pair

(temp, now.second+1)

);temp=now.first;

switch

(temp.d)

else

break

;break

;case

'w':

for(

int k=

0; k<3&&

--temp.y>

0; k++)if

(!map[temp.x-1]

[temp.y-1]

&&!map[temp.x]

[temp.y-1]

)else

break

;break

;case

'e':

for(

int k=

0; k<3&&

++temp.y(!map[temp.x-1]

[temp.y]

&&!map[temp.x]

[temp.y]

)else

break

;break

;case

's':

for(

int k=

0; k<3&&

++temp.x(!map[temp.x]

[temp.y]

&&!map[temp.x]

[temp.y-1]

)else

break

;break;}

}puts

("-1");

}int

main()

bfs();

return0;

}

luogu P1126 機械人搬重物

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

P1126 機械人搬重物

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

P1126 機械人搬重物

includeusing namespace std const int inf 1000000000 int a 55 55 int sx,sy,ex,ey int n,m int mincnt inf int vis 100 100 mapmp struct node void bfs node...