|

楼主 |
发表于 2024-2-8 09:36:06
|
显示全部楼层
精简一下:
- #include <bits/stdc++.h>
- using namespace std;
- int q[51][2], front, rear;
- int prv[5][10][2], dist[5][10];
- void print(int a, int b) {
- if (a == 0 && b == 0) {
- printf("%d %d\n", a, b);
- return;
- }
- print(prv[a][b][0], prv[a][b][1]);
- printf("%d %d\n", a, b);
- }
- signed main() {
- memset(dist, -1, sizeof(dist));
- dist[0][0] = 0;
- q[rear++][0] = 0; q[rear][1] = 0;
- while (front < rear) {
- int a = q[front][0], b = q[front++][1];
- int actions[4][2] = {{4, b}, {a, 9}, {a, 0}, {0, b}};
- for (auto &act : actions) {
- if (dist[act[0]][act[1]] == -1) {
- dist[act[0]][act[1]] = dist[a][b] + 1;
- prv[act[0]][act[1]][0] = a;
- prv[act[0]][act[1]][1] = b;
- q[rear][0] = act[0];
- q[rear++][1] = act[1];
- }
- }
- int dt = min(a, 9 - b);
- if (dist[a - dt][b + dt] == -1) {
- update_state(a, b, a - dt, b + dt);
- }
- dt = min(4 - a, b);
- if (dist[a + dt][b - dt] == -1) {
- update_state(a, b, a + dt, b - dt);
- }
- }
- print(4, 6);
- return 0;
- }
- void update_state(int a, int b, int na, int nb) {
- dist[na][nb] = dist[a][b] + 1;
- prv[na][nb][0] = a;
- prv[na][nb][1] = b;
- q[rear][0] = na;
- q[rear++][1] = nb;
- }
复制代码 |
评分
-
查看全部评分
|