RE了,求救

P2730 [USACO3.2] 魔板 Magic Squares

头像瞩目
by sto_OwenLMZ2022_orz @ 2022-10-05 20:17:38


所以大佬能帮我吗qwq
by dream0330 @ 2022-10-05 20:21:02


@[dream0330](/user/541411) 操作不一定有序(装作不认识你)给个互关吧 ```cpp #include <iostream> #include <cstdio> using namespace std; const int k[8] = { 5040,720,120,24,6,2,1,1 }; int b[8]; int p[500000]; struct st { int a[8]; int step, f; char ch; }m[41000]; void bfs(); void print(int h) { int n = 0; for (int i = h; i != 0; i = m[i].f) p[n++] = i; for (int i = n - 1; i >= 0; --i) cout << m[p[i]].ch; } int turn(st d) { int s = 0, s2 = 0; for (int i = 0; i < 8; ++i) { for (int j = 0; j < i; ++j) if (d.a[j] < d.a[i]) ++s2; s += (d.a[i] - s2) * k[i]; s2=0; } return s; } int main() { for (int i = 0; i < 8; ++i) cin >> b[i]; for (int i = 0; i < 8; ++i) m[0].a[i] = i + 1; m[0].step = 0; m[0].f = -1; bfs(); return 0; } st change(st q, int f) { if (f == 1) { for (int i = 0; i <= 3; ++i) swap(q.a[i], q.a[7 - i]); q.ch = 'A'; } if (f == 2) { for (int i = 2; i >= 0; --i) swap(q.a[i], q.a[i + 1]), swap(q.a[7 - i], q.a[6 - i]); q.ch = 'B'; } if (f == 3) { swap(q.a[1], q.a[6]); swap(q.a[6], q.a[5]); swap(q.a[5], q.a[2]); q.ch = 'C'; } ++q.step; return q; } bool vis[500000]; int head, tail; void bfs() { vis[0] = true; head = -1, tail = 0; while (head <= tail) { ++head; st k; for (int i = 1; i <= 3; ++i) { k = change(m[head], i); int g = turn(k); if (!vis[g]) { vis[g] = true; ++tail; m[tail] = k; m[tail].f = head; } } bool flag = true; for (int i = 0; i < 8; ++i) if (m[head].a[i] != b[i]) { flag = false; break; } if (flag) { cout << m[head].step << endl; print(head); break; } } } ```
by mouse_boy @ 2022-10-05 21:10:29


谢谢大佬qwq
by dream0330 @ 2022-10-05 21:11:58


|