洛谷P1126 機械人搬重物 BFS

2021-09-12 10:12:24 字數 1615 閱讀 8912

description:

機械人從起點開始走,每次可以轉彎和前進1到三步,不能經過障礙物,問最少要多少時間到達目的地。

input:

迷宮,起終點,初始方向

output:

answer

analysis:

就是bfs,還是幾個要素,狀態的設計,狀態的判重,狀態的轉移。有乙個坑點是點和線的轉換。第一次用了array模板,還是挺方便的。

#define _crt_secure_no_warnings  

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define _for(i,a,b) for(int i=(a);i<(b);++i)

#define _rep(i,a,b) for(int i=(a);i<=(b);++i)

typedef long long ll;

const int inf = 1 << 30;

const int maxn = 55;

const int mod = 1e9 + 7;

const double eps = 1e-6;

const double pi = acos(-1);

struct state ;

int dr = , dc = ;

int n, m,pic[maxn][maxn],vis[maxn][maxn][4],sr,sc,tr,tc,sdir;

int block[maxn][maxn];

arraypre[maxn][maxn][4];

char cc;

int ch2dir(char ch)

bool ok(int r, int c,int dir,int prer,int prec)

return true;

}void print(int r, int c, int dir)

int bfs()

} sdir = ch2dir(cc);

q.push(state);

vis[sr][sc][sdir] = 1;

pre[sr][sc][sdir] = ;

while (q.size())

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

vis[nr][nc][now.dir] = 1;

pre[nr][nc][now.dir] = ;

}} for (int dd = -1; dd <= 1; dd += 2) );

vis[now.r][now.c][ndir] = 1;

pre[now.r][now.c][ndir] = ;

}} }

return -1;

}int main()

cin >> sr >> sc >> tr >> tc >> cc;

cout << bfs() << endl;

} return 0;

}

洛谷P1126 機械人搬重物

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

洛谷P1126 機械人搬重物

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

P1126機械人搬重物 洛谷

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