本人采用的是蛮力算法,即,对于每种状态,将可能接下去的路都进行一遍(共3条路可以走)
然后,终止条件是,最终可用于前进的步子为0,即,count=hi。这时候,则说明每一个步子都是重复前人的步子,最终必然又会回到最初的起点,故终止。或者终止条件是,找到答案了。
但是蛮力算法耗时久,无论如何也无法在1s内完成计算。
而根据前人的成功例子来看,必然存在某种规则,我也想了蛮久的。可暂时还是没发现规则,由于我的目的是学习数据结构,所以对魔方复原的规则在此也就不再深究了,也就只能拿85了。。。(不甘心呀QAQ)
#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
#define maxn 130309//maxn取得足够大,保证没有冲突
#define max_num 1000
using namespace std;
struct toyy {
int toy[8];
int effect = 1;//用来记录当前的toy是否有效,无效则遍历时跳过
int h = 0;//用来记录当前步数
toyy&operator=(const toyy&a)
{
for (auto i = 0; i < 8; i++)toy[i] = a.toy[i];
effect = a.effect;
h = a.h;
return *this;
}
};
int toys[8] = { 1,2,3,4,5,6,7,8 };
struct boxx {
int num = 0;
int index = 0;
boxx&operator=(