機械人移動學會(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的網格,有些格仔為不可移動的障礙。機械人的中心總是在格點上,當然,機械人必須在最短的時間內把物品搬運到指定的地方。機械人接受的指令有 向前移動...