广搜48分后4个点TLE,求神犇

P2730 [USACO3.2] 魔板 Magic Squares

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


|