头像瞩目
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