所谓“周界搜索”,练习搜索的好题,双向宽搜/迭代加深均可,还有很多细节有待完善,判重有比set更优的结构,宽搜还没写,先存一下。

//Writer:GhostCai && His Yellow Duck

#include<iostream>
#include<string>
#include<set>
#include<queue>
using namespace std; set<string> book;
set<string> ans;
bool flag;
string tar="034305650121078709X90";
string st,tmp,sr;
int n; void change(int way,string &r){
char sav;
int i;
switch(way){
case 1:
sav=r[11];
for(i=11;i>=1;i--) r[i]=r[i-1];
r[0]=sav;
break;
case 2:
sav=r[0];
for(i=0;i<=10;i++) r[i]=r[i+1];
r[11]=sav;
break;
case 3:
sav=r[9];
for(i=9;i<=19;i++) r[i]=r[i+1];
r[20]=sav;
break;
case 4:
sav=r[20];
for(i=20;i>=10;i--) r[i]=r[i-1];
r[9]=sav;
break;
} } void make(int dp,int mxdp){
if(dp>mxdp) return;
cout<<tar<<endl;
string pre;
for(int i=1;i<=4;i++){
pre=tar;
change(i,tar);
if(!ans.count(tar)) {
ans.insert(tar);
make(dp+1,mxdp);
}
tar=pre;
}
} void dfs(int dp,int mxdp){
if(dp>mxdp) return;
if(flag) return;
if(ans.count(tmp)){
flag=1;
return;
}
if(book.count(tmp) ) return;
// cout<<tmp<<endl;
int i;
string pre;
for(i=1;i<=4;i++){
pre=tmp;
change(i,tmp); //
dfs(dp+1,mxdp);
book.insert(tmp); tmp=pre;
}
} bool read_s(){
int s;
for(int i=1;i<=24;i++){
cin>>s;
if(i>=22) continue;
if(s==10) st+='X' ;
else st+=char('0'+s);
}
return true;
} int main(){
make(1,8);
cin>>n;
for(int i=1;i<=n;i++){
// read_s();
cin>>st;
// cout<<st<<endl;
if(st==tar) {
cout<<"PUZZLE ALREADY SOLVED\n";
st="";
continue;
}
tmp=st;
flag=0;
for(int i=1;i<=8;i++){
dfs(1,i);
if(flag){
cout<<i<<endl;
break;
}
}
if(!flag) cout<<"NO SOLUTION WAS FOUND IN 16 STEPS\n";
st="";
} }

最新文章

  1. translate和replace的区别
  2. JavaScript中的分支结构
  3. Android组件---四大布局的属性详解
  4. navicat内的主键和外键
  5. 解决Ubuntu下vbox的(rc=-1908)
  6. 即时通讯(IM)
  7. struts2第一个程序的详解(配图)
  8. PC版模块滚动不显示滚动条效果
  9. 小程序--scroll-view的横向滑动无效
  10. ajax轮询与长轮询
  11. HS BDC HDU - 3472(混合欧拉路径)
  12. python 给字符串加颜色
  13. 【LeetCode每天一题】Search in Rotated Sorted Array(在旋转数组中搜索)
  14. jsplumb流程器使用2
  15. C++的虚函数试题,常考!!
  16. centos7 tengine 安装
  17. Leetcode题库——20.有效的括号
  18. 解题:POI 2014 Ant colony
  19. Ubuntu 18.04设置dns
  20. TCGA系列--TCGA可视化数据库GEPIA

热门文章

  1. 设置DataTable行属性
  2. 多线程:『GCD』详尽总结
  3. C++中this指针的理解
  4. CATIA 基础详解 第01章 CATIA初认识
  5. 防止a标签跳转的几种方法
  6. idea获取激活码
  7. java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
  8. 怎么样去优化我们的SQL语句
  9. setTimeout的核心原理和巧用
  10. sql 使用汇总(PQSQL)