AcWing 3163. 青蛙跳杯子
原题链接
简单
作者:
cange
,
2021-04-11 10:41:58
,
所有人可见
,
阅读 395
#include<bits/stdc++.h>
using namespace std;
string start,endlast;
int len;
int bfs(){
queue<string> res;
unordered_map<string,int> sum; //加快编译
res.push(start); //把开始状态先添加进来
sum[start]=0;
int dis[6]={1,-1,2,-2,3,-3}; //6个方向
while(!res.empty()){
string t=res.front(); //取队头
res.pop();
int distance=sum[t];
if(t==endlast){
return distance;
}
int pos=t.find('*');
for(int i=0;i<6;i++){ //6个方向尝试一遍,并把新的状态记录下来,添加进来队列
int p2=pos+dis[i];
if(p2>-1&&p2<len){
swap(t[pos],t[p2]);
if(sum.count(t)==0){
sum[t]=distance+1;
res.push(t);
}
swap(t[pos],t[p2]);
}
}
}
return -1;
}
int main(){
getline(cin,start);
getline(cin,endlast);
len=start.size();
cout<<bfs()<<endl;
}