P1126 機械人搬重物 複雜bfs

2021-08-22 06:20:57 字數 1257 閱讀 1365

p1126 機械人搬重物 傳送門

說實話這道題蠻複雜度, 需要注意的東西比較多.

如對於乙個座標,可能有四個方向的情況, 所以vis陣列用三維來表示.

機械人的旋轉和方向是用num%4來表示的, num為0代表向南, 為1代表向東, 為2代表向北, 為3代表向西,那麼只要我根據前乙個狀態的方向num, 調整num(+1或-1), 然後取模, 就可以得到現在的方向.

此題對條件的判斷稍複雜, 需要非常細心. 索性第一次提交90分, 發現起點就是終點這種情況沒有考慮進去.

#include 

#include

#include

#include

#include

#define mp(x, y) make_pair(x, y)

using

namespace

std;

typedef pair ii;

const

int maxn = 55;

int n, m, sx, sy, ex, ey, num;

int mov[4][2] = , , , };

intmap[maxn][maxn], vis[maxn][maxn][4];

char start;

bool bfs()

if (!vis[x][y][(num + 1) % 4])

if (num == 0) num = 4;

if (!vis[x][y][(num - 1) % 4])

}return

false;

}int main()

}cin >> sx >> sy >> ex >> ey >> start;

if (start == 's') num = 0;

else

if (start == 'e') num = 1;

else

if (start == 'n') num = 2;

else

if (start == 'w') num = 3;

memset(vis, 0, sizeof(vis));

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

bfs();

for (int i = 0; i < 4; ++i)

}cout

<< -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...

P1126 機械人搬重物

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