class Solution {
public:
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
int bfs(string &st){
queue<string> q;
unordered_map<string,int> dist;
q.push(st);
dist[st]=0;
string ed="123450";
while(q.size()){
auto t=q.front();
q.pop();
int distance=dist[t];
if(t==ed) return distance;
int idx=t.find('0');
int a=idx/3,b=idx%3;
for(int i=0;i<4;i++){
int x=a+dx[i],y=b+dy[i];
if(x<0||x>=2||y<0||y>=3) continue;
swap(t[idx],t[x*3+y]);
if(!dist.count(t)){
dist[t]=distance+1;
q.push(t);
}
swap(t[idx],t[x*3+y]);
}
}
return -1;
}
int slidingPuzzle(vector<vector<int>>& g) {
string st;
for(auto i:g)
for(auto j:i)
st+=to_string(j);
return bfs(st);
}
};
773. 滑动谜题
最新推荐文章于 2024-08-25 17:36:33 发布
本文介绍了一个使用广度优先搜索(BFS)算法解决二维网格滑动拼图问题的C++类Solution。通过BFS遍历状态空间,找到从初始状态到目标状态的最短路径。
摘要由CSDN通过智能技术生成