2 条题解
-
2
-
1
参考答案:
#include<iostream> #include<string> #include<unordered_map> #include<queue> using namespace std; queue<string> q; unordered_map<string, int>d; int bfs(string start) { string end = "12345678x"; q.push(start); d[start] = 0; while (q.size()) { int dx[4] = { 0,0,-1,1 }, dy[4] = { 1,-1,0,0 }; string t = q.front(); int dis = d[t]; q.pop(); if (t == end) return dis; int k = t.find('x'); int a = k / 3, b = k % 3;//一维转二维; for (int i = 0; i < 4; ++i) { int x = a + dx[i], y = b + dy[i];//二维转一维; if (x >= 0 && x < 3 && y >= 0 && y < 3) { swap(t[k], t[x * 3 + y]); if (!d[t]) { d[t] = dis + 1; q.push(t); } swap(t[k], t[x * 3 + y]); } } } return -1; } int main() { char ch[2]; string start; for (int i = 1; i <= 9; ++i) { scanf("%s", ch); start += *ch; } cout << bfs(start) << endl; return 0; }
- 1
信息
- ID
- 91
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 3
- 上传者