#include<iostream>#include<cstring>#include<algorithm>#include<queue>#include<unordered_map>usingnamespace std;typedef pair<int, string> PIS;intf(string state)// 估价函数{int res =0;for(int i =0; i < state.size(); i ++)if(state[i]!='x'){int t = state[i]-'1';
res +=abs(i /3- t /3)+abs(i %3- t %3);}return res;}
string bfs(string start){int dx[4]={-1,0,1,0}, dy[4]={0,1,0,-1};char op[4]={'u','r','d','l'};
string end ="12345678x";
unordered_map<string,int> dist;
unordered_map<string, pair<string,char>> prev;
priority_queue<PIS, vector<PIS>, greater<PIS>> heap;
heap.push({f(start), start});
dist[start]=0;while(heap.size()){auto t = heap.top();
heap.pop();
string state = t.second;if(state == end)break;int step = dist[state];int x, y;for(int i =0; i < state.size(); i ++)if(state[i]=='x'){
x = i /3, y = i %3;break;}
string source = state;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(state[x *3+ y], state[a *3+ b]);if(!dist.count(state)|| dist[state]> step +1){
dist[state]= step +1;
prev[state]={source, op[i]};
heap.push({dist[state]+f(state), state});}swap(state[x *3+ y], state[a *3+ b]);}}}
string res;while(end != start){
res += prev[end].second;
end = prev[end].first;}reverse(res.begin(), res.end());return res;}intmain(){
string g, c, seq;while(cin >> c){
g += c;if(c !="x") seq += c;}int t =0;for(int i =0; i < seq.size(); i ++)for(int j = i +1; j < seq.size(); j ++)if(seq[i]> seq[j])
t ++;if(t %2)puts("unsolvable");else cout <<bfs(g)<< endl;return0;}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】