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