7098 array<array<char, 3>, 3> target{};
7099 array<array<char, 3>, 3> grid{};
7100 unordered_set<array<array<char, 3>, 3>, hash> us;
7103 for(
int i = 0; i < 9; i++) {
7104 cin >> grid[i / 3][i % 3];
7105 if(grid[i / 3][i % 3] ==
'x') {
7109 target[i / 3][i % 3] = i +
'1';
7112 queue<tuple<array<array<char, 3>, 3>, int, int,
int>> q;
7113 q.push(make_tuple(grid, 0, start_x, start_y));
7116 auto [g, step, x, y] = q.front();
7122 pair<int, int> nexts[4] = {
7123 make_pair(x, y + 1),
7124 make_pair(x, y - 1),
7125 make_pair(x + 1, y),
7126 make_pair(x - 1, y)};
7127 for(
auto &[nx, ny]: nexts) {
7128 if(nx >= 0 && nx < 3 && ny >= 0 && ny < 3) {
7129 swap(g[nx][ny], g[x][y]);
7130 if(!us.contains(g)) {
7132 q.push(make_tuple(g, step + 1, nx, ny));
7134 swap(g[nx][ny], g[x][y]);