機械人移動學會(rmi)現在正嘗試用機械人搬運物品。機械人的形狀是乙個直徑1.6公尺的球。在試驗階段,機械人被用於在乙個儲藏室中搬運貨物。儲藏室是乙個n×m 的網格,有些格仔為不可移動的障礙。機械人的中心總是在格點上,當然,機械人必須在最短的時間內把物品搬運到指定的地方。機械人接受的指令有:向前移動1步(creep);向前移動2步(walk);向前移動3 步(run);向左轉(left);向右轉(right)。每個指令所需要的時間為1 秒。請你計算一下機械人完成任務所需的最少時間。
第一行為兩個正整數n,m(n,m≤50),下面n行是儲藏室的構造,0表示無障礙,1表示有障礙,數字之間用乙個空格隔開。接著一行有4個整數和1個大寫字母,分別為起始點和目標點左上角網格的行與列,起始時的面對方向(東e,南s,西w,北n),數與數,數與字母之間均用乙個空格隔開。終點的面向方向是任意的。
乙個整數,表示機械人完成任務所需的最少時間。如果無法到達,輸出−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
這個sb題,我思路完全ok就是不給過,硬生生卡了好久,最後還非要我把**改的和別人差不多才過。
#include
using
namespace std;
int n, m;
int s[60]
[60];
//儲物室構造
int cf[60]
[60][
4]=;
//判重
int a[4]
=;int b[4]
=;class
node
;node beginn, endd;
queue r;
bool
limit
(int xx,
int yy)
//障礙物
void
bfs()if
(cf[temp.x]
[temp.y]
[temp.dir]==1
)continue
; cf[temp.x]
[temp.y]
[temp.dir]=1
;//查重
temp.time++
; temp.dir =
(dir +3)
%4; r.
push
(temp)
; temp.dir =
(dir +5)
%4; r.
push
(temp)
; temp.dir = dir;
for(
int j =
1; j <=
3; j++
)//三種速度}}
intmain()
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...
P1126 機械人搬重物
機械人移動學會 rmi 現在正嘗試用機械人搬運物品。機械人的形狀是乙個直徑 1.6公尺的球。在試驗階段,機械人被用於在乙個儲藏室中搬運貨物。儲藏室是乙個n times mn m的網格,有些格仔為不可移動的障礙。機械人的中心總是在格點上,當然,機械人必須在最短的時間內把物品搬運到指定的地方。機械人接受...