3163.青蛙跳杯子
作者:
小笔摘纸
,
2024-04-10 20:42:38
,
所有人可见
,
阅读 7
//典型的bfs和八数码很像
//无脑队列就完了
#include<iostream>
#include<cstring>
#include<map>
#include<queue>
#include<algorithm>
using namespace std;
string s,t; //定义起始状态和截止状态
int len;
int bfs(){
queue<string> q;
unordered_map<string,int> dist; //存的是步数
q.push(s);
dist[s]=0;
while(q.size()){
auto k=q.front();
q.pop();
int distance=dist[k];
if(k==t) return distance;
int dx[]={1,-1,2,-2,3,-3}; //依照题意6个方向
int t=k.find('*');
for(int i=0;i<6;i++){
int nx=t+dx[i];
if(nx>=0&&nx<len){
swap(k[t],k[nx]);
if(dist.count(k)==0){ //如果这种情况没有到达过就+1bfs就是不吃回头草
dist[k]=distance+1;
q.push(k);
}
swap(k[t],k[nx]); //恢复状态
}
}
}
return -1;
}
int main(){
cin>>s>>t;
len=s.size();
cout<<bfs();
return 0;
}