标签:问题 int name 相对 push bsp class mes 优先
这种搜索仅限于解决起始状态和结束状态可以互换的问题之中,也就是从头搜到尾和从尾搜到头是等价的
移动一个只含字母A和B的字符串中的字母,给定初始状态为(a)表,目标状态为(b)表,给定移动规则为:只能互相对换相邻字母。请找出一条移动最少步数的办法
NKOJ1688移字母游戏
一通好找啊
1 #include<cstdio> 2 #include<iostream> 3 #include<map> 4 #include<queue> 5 using namespace std; 6 string s1,s2; 7 map<string,int>vis; 8 map<string,int>step; 9 queue<string>q[2]; 10 int len; 11 int bfs(){ 12 q[0].push(s1);vis[s1]=1;step[s1]=0; 13 q[1].push(s2);vis[s2]=2;step[s2]=0; 14 while(q[0].size()&&q[1].size()){ 15 int t,i; 16 string x,y; 17 t= q[0].size()>=q[1].size(); 18 x=q[t].front();q[t].pop(); 19 y=x; 20 for(i=1;i<len;i++) 21 if(x[i]!=x[i-1]){ 22 swap(y[i],y[i-1]); 23 if(vis[x]&&vis[y]&&vis[x]!=vis[y])return step[x]+step[y]+1; 24 if(!vis[y]){ 25 vis[y]=vis[x]; 26 step[y]=step[x]+1; 27 q[t].push(y); 28 } 29 y=x; 30 } 31 } 32 } 33 int main(){ 34 cin>>s1>>s2; 35 len=s1.length(); 36 cout<<bfs(); 37 }
标签:问题 int name 相对 push bsp class mes 优先
原文地址:https://www.cnblogs.com/aininot260/p/9627437.html