蓝桥打卡-5-青蛙跳杯子(八数码)
作者:
因为yxc爱上编程
,
2024-04-07 10:45:02
,
所有人可见
,
阅读 25
#include <iostream>
#include<algorithm>
#include<queue>
#include<unordered_map>
using namespace std;
queue<string>q;
int dx[]={1,-1,2,-2,3,-3};
unordered_map<string,int>d;
int bfs(string start,string end){
d[start]=0;
q.push(start);
while(q.size()){
auto t=q.front();//&&&&&&&&&&&(老忘记)出队一个就要pop掉
q.pop();
int distance=d[t];
if(t==end) return d[t];
int idx=t.find('*');
for(int i=0;i<6;i++){
int nidx=idx+dx[i];
if(nidx>=0&&nidx<t.size())&&&&&&&&&&&&&&&等于号不要忘记
{swap(t[idx],t[nidx]); //交换完之后t本身就变了
if(!d.count(t)){ //判断映射里面是否有重复的
d[t]=distance+1;
q.push(t);//bfs方式找出来的一定是最短距离
}
swap(t[idx],t[nidx]);
}
}
}
return -1;
}
int main()
{
string start;
string end;
cin>>start>>end;
//*可以与谁交换的问题,+1、-1、+2、-2、+3、-3移动路径
cout<<bfs(start,end)<<endl;
return 0;
}