CSU 1975 機械人搬重物(BFS)

2022-05-16 05:50:04 字數 2390 閱讀 2309

time limit: 1 sec     memory limit: 128 mb     submitted: 64     solved: 10    

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

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

12

機械人搬重物

題意:給你乙個圖,讓你求出機械人從乙個點到另乙個點需要的最短時間。乍一看就是普通的bfs求最短路問題。但是有很多坑。。。很多坑。。

①首先機械人是在點上,障礙物是格仔,也就是說機械人所在的點周圍的4個格仔都不能有障礙物。而且點和格仔的座標對應關係要弄清楚,最好畫個圖。

②然後行走分了方向,其實就是bfs多了兩個選擇,乙個左轉乙個右轉。

③走的時候有直走1、2、3步三種方式,需要判斷前方有沒有障礙。

思路:進行bfs,直接採用優先佇列,這樣可以確定到達某一點時肯定是最短時間,不會因為轉向什麼的產生影響。

幾個特判的地方要注意:①起點終點一樣,0。②起點或終點在不可移動的地方,-1。

#include#include

#include

using

namespace

std;

const

int maxn=55

;char

c;int

a[maxn][maxn],n,m,sx,sy,ex,ey,sd;

int dy[4]=;

int dx[4]=;

bool vis[maxn][maxn][5

];struct

node

};priority_queue

q;//

queueq;

bool check(int x,int

y)void

bfs()

if(!check(ex,ey))

while(!q.empty()) q.pop();

q.push(now);

vis[sx][sy][sd] = true

;

while(!q.empty())

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

else

//如果1 2 3某乙個不能走,那後面的肯定不能走

}if(vis[now.x][now.y][(now.d+1)%4]==false)//

óòת

if(vis[now.x][now.y][(now.d-1+4)%4]==false)//

×óת

}printf(

"-1\n");

}int

main()

}scanf(

"%d %d %d %d

",&sx,&sy,&ex,&ey);

getchar();

scanf("%c

",&c);

if(sx==ex&&sy==ey)

if(c=='

e') sd=0

;

else

if(c=='

s') sd=1

;

else

if(c=='

w') sd=2

;

else

if(c=='

n') sd=3

; bfs();}}

機械人搬重物

時間限制 1 sec 記憶體限制 128 mb 提交 28 解決 13 提交 狀態 討論版 機械人移動學會 rmi 現在正嘗試用機械人搬運物品。機械人的形狀是乙個直徑1.6公尺的球。在試驗階段,機械人被用於在乙個儲藏室中搬運貨物。儲藏室是乙個n m的網格,有些格仔為不可移動的障礙。機械人的中心總是在...

機械人搬重物 BFS

時間限制 1 sec 記憶體限制 256 mb 機械人移動學會 rmi 現在正嘗試用機械人搬運物品。機械人的形狀是乙個直徑 1.6 公尺的球。在試驗階段,機械人被用於在乙個儲藏室中搬運貨物。儲藏室是乙個 n m 的網格,有些格仔為不可移動的障礙。機械人的中心總是在格點上,當然,機械人必須在最短的時間...

廣度搜尋 機械人搬重物

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