社区讨论
90求条,有助闭关
P1379八数码难题参与者 2已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mlheqap9
- 此快照首次捕获于
- 2026/02/11 10:25 上周
- 此快照最后确认于
- 2026/02/11 11:20 上周
WA on #31
CPP#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
string s1,s2="123804765";
map<string,int> mp;
int dx[]={-3,1,3,-1};
void dfs(string s)
{
queue<string> q;
mp[s]=0;
q.push(s);
while(!q.empty())
{
string ts=q.front();
int k=ts.find('0'),bs=mp[ts];
q.pop();
for(int i=0;i<4;i++)
{
if(i==1 && k%3==2) continue;
else if(i==3 && k%3==0) continue;
int tk=k+dx[i];
if(tk>=0 && tk<=8)
{
swap(ts[tk],ts[k]);
if(ts==s2)
{
cout<<bs+1;
return;
}
if(mp.find(ts)==mp.end())
{
mp[ts]=bs+1;
q.push(ts);
}
swap(ts[tk],ts[k]);
}
}
}
}
signed main()
{
IOS;
cin>>s1;
dfs(s1);
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...