琢磨了好久了,de不出来
#include <iostream>
#include <queue>
#include <unordered_map>
#include <string>
#include <algorithm>
using namespace std;
int bfs(string state)
{
queue<string> q;
unordered_map<string, int> d;
d[state] = 0;
q.push(state);
string end = "12345678x";
int dx[4] ={-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
while (q.size())
{
auto t = q.front();
q.pop();
if (t == end) return d[t];
int k = t.find('x');
int distance = d[t];
int x = k / 3, y = k % 3;
for (int i = 0; i < 4; i ++ )
{
int a = x + dx[i], b = y + dy[i];
if (a >= 0 && a < 3 && b >= 0 && b < 3)
{
swap(t[a * 3 + b], t[k]);
if (!d.count(t));
{
d[t] = distance + 1;
q.push(t);
}
swap(t[a * 3 + b], t[k]);
}
}
}
return -1;
}
int main()
{
string state;
char op[2];
for (int i = 0; i < 9; i ++ )
{
cin >> op;
state += *op;
}
cout << bfs(state) << endl;
return 0;
}
您的代码中有一个小错误,导致了超时问题。在第 29 行,您使用了一个分号,这会导致 if 语句不执行任何操作。请删除该分号,然后您的代码应该可以正常运行。以下是修复后的代码:
现在,您的代码应该可以正常运行并在合理的时间内给出结果。
谢谢大佬,看了好久没发现