求助八数码
  • 板块灌水区
  • 楼主FANTA5TlC
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/10/7 11:20
  • 上次更新2023/11/4 04:28:29
查看原帖
求助八数码
297798
FANTA5TlC楼主2021/10/7 11:20
#include <bits/stdc++.h>
using namespace std;
map<int,int> M;
int main(){
//  freopen(".in", "r", stdin);
//  freopen(".out", "w", stdout);
	int a;
	cin >> a;
	queue<int> Q;
	Q.push(a);
	M[a] = 0;
	while (Q.empty() == false){
		int f = Q.front();
		Q.pop();
		int m[4][4];
		m[1][1] = a / 100000000;
		m[1][2] = a / 10000000 % 10;
		m[1][3] = a / 1000000 % 10;
		m[2][1] = a / 100000 % 10;
		m[2][2] = a / 10000 % 10;
		m[2][3] = a / 1000 % 10;
		m[3][1] = a / 100 % 10;
		m[3][2] = a / 10 % 10;
		m[3][3] = a % 10;
		for (int i = 1; i <= 3; ++i)
			for (int j = 1; j <= 3; ++j)
				if (m[i][j] == 0){
					if (i - 1 >= 1){
						swap(m[i][j], m[i - 1][j]);
						int p = m[1][1] * 100000000 + m[1][2] * 10000000 + m[1][3] * 1000000 + m[2][1] * 100000 + m[2][2] * 10000 + m[2][3] * 1000 + m[3][1] * 100 + m[3][2] * 10 + m[3][3];
						if (M.count(p) == false){
							Q.push(p);
							M[p] = M[f + 1];
						}
						swap(m[i][j], m[i - 1][j]);
					}
					if (j - 1 >= 1){
						swap(m[i][j], m[i][j - 1]);
						int p = m[1][1] * 100000000 + m[1][2] * 10000000 + m[1][3] * 1000000 + m[2][1] * 100000 + m[2][2] * 10000 + m[2][3] * 1000 + m[3][1] * 100 + m[3][2] * 10 + m[3][3];
						if (M.count(p) == false){
							Q.push(p);
							M[p] = M[f + 1];
						}
						swap(m[i][j], m[i][j - 1]);
					}
					if (i + 1 <= 3){
						swap(m[i][j], m[i + 1][j]);
						int p = m[1][1] * 100000000 + m[1][2] * 10000000 + m[1][3] * 1000000 + m[2][1] * 100000 + m[2][2] * 10000 + m[2][3] * 1000 + m[3][1] * 100 + m[3][2] * 10 + m[3][3];
						if (M.count(p) == false){
							Q.push(p);
							M[p] = M[f + 1];
						}
						swap(m[i][j], m[i + 1][j]);
					}
					if (j + 1 <= 3){
						swap(m[i][j], m[i][j + 1]);
						int p = m[1][1] * 100000000 + m[1][2] * 10000000 + m[1][3] * 1000000 + m[2][1] * 100000 + m[2][2] * 10000 + m[2][3] * 1000 + m[3][1] * 100 + m[3][2] * 10 + m[3][3];
						if (M.count(p) == false){
							Q.push(p);
							M[p] = M[f + 1];
						}
						swap(m[i][j], m[i][j + 1]);
					}
				}
	}
	cout << M[123804765] << endl;
	return 0;
}

rt,求助,洛谷有

2021/10/7 11:20
加载中...