由于用深度优先搜索算法不能提交,故采用广度搜索优先算法。这里的广度优先算法比较特殊一点,就是我采用了类似加法器的进位机制来实现。(make by liurunjia 转载请注明出处,thx)
#include#include using namespace std;#define N 10//定义数据结构typedef struct node{ int a1; int a2; int a3; int a4; int a5; int a6; int a7; int a8;}Node; //操作数组 char optArray[N]; Node StateNode;//表示当前状态 Node Target;//表示目标状态 int STEP;//声明比较函数bool isEqual(Node a,Node b);//声明操作函数(操作符)void operatorFunction(char opt); //模仿加法进位,返回值表示是否已经达到最大值,即不能再进位了 bool IncreaseByStep(){ bool flag=true; for(int i=0;i >STEP&&STEP!=-1) { cin>>Target.a1>>Target.a2>>Target.a3>>Target.a4>>Target.a5>>Target.a6>>Target.a7>>Target.a8; bool myFlag=true; init(); initState(); while(myFlag) { if(IncreaseByStep()) { initState(); bool stepFlag=true; int stepInfact; for(int j=N-1;j>=0;j--) { if(optArray[j]!='O') { if(stepFlag) { stepInfact=j+1; stepFlag=false; } operatorFunction(optArray[j]); } } if(isEqual(StateNode,Target)) { cout< <<" "; for(int j=stepInfact-1;j>=0;j--) { cout<