P1126 機械人搬重物 bfs 座標系 1

2021-09-10 13:23:01 字數 1666 閱讀 7307

機械人移動學會(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:複製

12
#include#include#include#include#include#include#include#includeusing namespace std;

typedef struct node;

node start,last,tnode;

setza; //又來儲存障礙頂點

setvs;// 儲存處理過的狀態,1000x+10y+dir

queueque;

int n,m;

int n,m;

bool isgo=true;

int xx= ;

int yy= ;

bool existed(node t)

}void bfs()

}cin>>start.x>>start.y;

cin>>last.x>>last.y;

char c;

cin>>c;

switch(c)

start.il=0;

vs.insert(1000*start.x+10*start.y+start.dir);

que.push(start);

bfs();

}

P1126 機械人搬重物 複雜bfs

p1126 機械人搬重物 傳送門 說實話這道題蠻複雜度,需要注意的東西比較多.如對於乙個座標,可能有四個方向的情況,所以vis陣列用三維來表示.機械人的旋轉和方向是用num 4來表示的,num為0代表向南,為1代表向東,為2代表向北,為3代表向西,那麼只要我根據前乙個狀態的方向num,調整num 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...