if(q.empty()){
return "-1";
}
这个是可以不要的,可以删掉,减少时间复杂度
在移动函数里要多开一个string y=v,让y去代替v移动,同时利用v改变y,就不需要temp这个中间值,然后判断y是否被搜索过去重
另外,map可以只开一个来存储步数以及去重,用
(加在函数里,拿A举个例子吧)
(建议全部用string,因为map里面数值很大)
map<string,string> mp;
void A(string v){
string y=v;
y=SWap(v,0,7);
y=SWap(v,1,6);
y=SWap(v,2,5);
y=SWap(v,3,4);
if(mp.count(y)==0){
q.push(y);
mp[y]=mp[v]+'A';
}
加油,相信你一定能过!
by PeaceSunset @ 2023-08-10 14:22:05
哦,还可以改一改。
if(q.empty()){
return "-1";
}
改为
bfs(){
...
...
while(q.size()){
...
...
}
}
by PeaceSunset @ 2023-08-10 14:25:33