機械人移動學會(rmi)現在正嘗試用機械人搬運物品。機械人的形狀是乙個直徑1.6公尺的球。在試驗階段,機械人被用於在乙個儲藏室中搬運貨物。儲藏室是乙個n*m的網格,有些格仔為不可移動的障礙。機械人的中心總是在格點上,當然,機械人必須在最短的時間內把物品搬運到指定的地方。機械人接受的指令有:向前移動1步(creep);向前移動2步(walk);向前移動3步(run);向左轉(left);向右轉(right)。每個指令所需要的時間為1秒。請你計算一下機械人完成任務所需的最少時間。
輸入格式:
輸入的第一行為兩個正整數n,m(n,m<=50),下面n行是儲藏室的構造,0表示無障礙,1表示有障礙,數字之間用乙個空格隔開。接著一行有四個整數和乙個大寫字母,分別為起始點和目標點左上角網格的行與列,起始時的面對方向(東e,南s,西w,北n),數與數,數與字母之間均用乙個空格隔開。終點的面向方向是任意的。
輸出格式:
乙個整數,表示機械人完成任務所需的最少時間。如果無法到達,輸出-1。
輸入樣例#1:
複製
9 10輸出樣例#1: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
複製
12參考題解:
剛開始看到此題,也想到了用數字代表方向。但是卡在東南西北怎麼排列以及轉向怎麼儲存。看了題解發件要用乙個三維陣列儲存是否訪問過這個位置以及這個位置的方向。第一維是x,地兒維是y,第三位是方向。
坑點列舉:
程式細節:
#include#include#include#include#includeusing namespace std;
struct node
;queueq;
bool book[54][54][4];//標記陣列
int map[54][54];
int n, m;
int dx = ; int dy = ;
int sx, sy, ex, ey;
char sd;
int sdirect;
bool check(int nx, int ny)//判斷這個位置是否合法
void bfs()
for (int i = 1; i <= 3; i++)//走1,2,3步
}//左轉
newnode.direct = tmp.direct - 1; newnode.nx = tmp.nx, newnode.ny = tmp.ny, newnode.step = tmp.step + 1;
if (newnode.direct == -1) newnode.direct = 3;
if (!book[tmp.nx][tmp.ny][newnode.direct])
//右轉
newnode.direct = tmp.direct + 1;
if (newnode.direct == 4) newnode.direct = 0;
if (!book[tmp.nx][tmp.ny][newnode.direct])
} cout << -1;
}int main()
} scanf("%d%d%d%d %c", &sx, &sy, &ex, &ey, &sd);
if (!check(sx, sy))
if (sd == 'e') sdirect = 0;
else if (sd == 's') sdirect = 1;
else if (sd == 'w') sdirect = 2;
else sdirect = 3;
node first; first.nx = sx, first.ny = sy, first.direct = sdirect, first.step = 0;
q.push(first);
bfs();
return 0;
}
洛谷P1126 機械人搬重物
機械人移動學會 rmi 現在正嘗試用機械人搬運物品。機械人的形狀是乙個直徑 1.6 公尺的球。在試驗階段,機械人被用於在乙個儲藏室中搬運貨物。儲藏室是乙個 n m 的網格,有些格仔為不可移動的障礙。機械人的中心總是在格點上,當然,機械人必須在最短的時間內把物品搬運到指定的地方。機械人接受的指令有 向...
P1126機械人搬重物 洛谷
機械人移動學會 rmi 現在正嘗試用機械人搬運物品。機械人的形狀是乙個直徑 1.6 公尺的球。在試驗階段,機械人被用於在乙個儲藏室中搬運貨物。儲藏室是乙個 n mn times mn m 的網格,有些格仔為不可移動的障礙。機械人的中心總是在格點上,當然,機械人必須在最短的時間內把物品搬運到指定的地方...
洛谷P1126 機械人搬重物
機械人移動學會 rmi 現在正嘗試用機械人搬運物品。機械人的形狀是乙個直徑 1.6公尺的球。在試驗階段,機械人被用於在乙個儲藏室中搬運貨物。儲藏室是乙個n m的網格,有些格仔為不可移動的障礙。機械人的中心總是在格點上,當然,機械人必須在最短的時間內把物品搬運到指定的地方。機械人接受的指令有 向前移動...