水题系列
想法:
标准的广搜题,遍历青蛙所有能到达的瓶子,挨个放入队列,取出后判断即可
代码:
#include<iostream>
#include<string>
#include<queue>
#include<map>
using namespace std;
struct dian
{
string s;
int node;
};
int main()
{
string q,p;
map<string,int> m;
cin>>q>>p;
dian d;d.s=q;d.node=0;
queue<int> dp;
dp.push(d);
while(!dp.empty())
{
d=dp.front();dp.pop();
if(d.s==p)
{
cout<<d.node<<endl;
break;
}
int l=d.s.size();
for(int i=0;i<l;i++)
{
if(d.s[i]=='*')
{
for(int j=max(0,i-3);j<=min(l-1,i+3);j++)
{
dian sb;
sb.s=d.s;sb.node=d.node+1;
swap(sb.s[i],sb.s[j]);
if(m[sb.s]==0)
{
m[sb.s]++;
dp.push(sb);
}
}
}
}
}
return 0;
}