洛谷P1126 機械人搬重物

2021-08-21 14:42:23 字數 2475 閱讀 6393

機械人移動學會(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
這道題可以說是非常陰險了,本來只是一道很簡單的廣搜,結果被陰險的出題人硬生生地挖了好多坑,難度直接公升到提高qaq。

第乙個坑:要將格仔圖轉換為點圖。

第二個坑:機械人是有半徑的,所以要處理邊界,而且障礙物周圍的四個點都不能走。

第三個坑:方向非常麻煩,必須處理好。

只要解決了這幾個坑 ,剩下的廣搜就非常簡單了,在這裡不解釋。

廣搜模板:

// 先看主函式是一種好習慣

#include#include#include#includeusing namespace std;

bool map[51][51];

int vis[51][51][5];//行、列、方向

int dx[4]= ,dy[4]= ;

struct node ;

queueq;

node aaa;

int tx,ty,f,st,x1,x2,y1,y2,n,m;

int ans[5001]= ,tot,minl=0x7fffff;

int fx[5]= ,

fy[5]= ;

void bfs()

for(int j=1; j<=3; j++)

} //還是處理方向(這裡有些難理解)

//當碰到障礙,就會break到這裡轉向

node cnew;

cnew.x=aaa.x;

cnew.y=aaa.y;

cnew.step=aaa.step+1;

cnew.dir=aaa.dir-1;

if(cnew.dir==-1)cnew.dir=3;//從東向西轉,轉到北

if(!vis[cnew.x][cnew.y][cnew.dir])

cnew.dir=aaa.dir+1;

if(cnew.dir==4)cnew.dir=0;//從北向東轉,轉到東

if(!vis[cnew.x][cnew.y][cnew.dir])

} cout<

}int main()

} }//處理邊界

for(int i=1; i<=n; i++)

char fang;

cin>>x1>>y1>>x2>>y2>>fang;

//處理方向

if(fang=='e') aaa.dir=0;

else if(fang=='s') aaa.dir=1;

else if(fang=='w') aaa.dir=2;

else aaa.dir=3;

aaa.x=x1;

aaa.y=y1;

aaa.step=0;

q.push(aaa);

bfs();

return 0;

}

洛谷P1126 機械人搬重物

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

P1126機械人搬重物 洛谷

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

洛谷P1126 機械人搬重物

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