七彩鹦鹉螺魔方

目录

七彩鹦鹉螺魔方

魔方三要素

根据对半翻转做角度推理

根据组合做角度推理

有趣的形态

所有形态枚举(V1)

最速复原跳转表(V1)

启发式策略(单节点)(V1)

启发式策略(双节点)(V1)

刷新方案(V1 -> V2)

所有形态枚举(V2)

最速复原跳转表(V2)

启发式策略(单节点)(V2)

启发式策略(双节点)(V2)

启发式策略(三节点)(最终策略)


七彩鹦鹉螺魔方

魔方三要素

(1)组成部件

一共3层,每层7个不同的部件,按照从小到大分别是粉色,紫色,蓝色,绿色,黄色,橙色,红色。

(2)可执行操作

一共三种操作:旋转顶层、旋转底层、对半翻转。

为了方便,我们提出一个大操作的概念,即若干次旋转顶层+若干次旋转底层+1次对半翻转+若干次旋转顶层+若干次旋转底层,其中的若干可以为0。

显然,魔方的打乱和复原都是一系列的大操作。

(3)目标态

恢复鹦鹉螺的外形,即每个部件回到原本的位置。

根据对半翻转做角度推理

假设粉色,紫色,蓝色,绿色,黄色,橙色,红色分别是x1 x2 x3 x4 x5 x6 x7度,则x1+x2+x3+x4+x5+x6+x7=360

根据能完成对半翻转的场景,提出新的等式。

场景1:

则x1+x6+x7=180,x2+x3+x4+x5=180

场景2:

x1+x2+x3+x7=180,x4+x5+x6=180

场景3:

x7+x7=180

根据这3个场景,目前得到的方程组是:

x1=90-x6
x2+x3=x6
x4+x5=180-x6
x7=90

所以,还需要寻找3个条件。

场景4:

新增条件x3+x4=90

方程组变成:

x1=90-x6
x2=x6-x3
x4=90-x3
x5=90-x2
x7=90

所以,还需要寻找2个条件。

场景5:

新增条件x3+x6+x6=180

所以目前为止的所有条件汇总就是

x1=90-x6
x2=x6-x3
x4=90-x3
x5=90-x2
x7=90
x3+x6+x6=180
x1<x2<x3<x4<x5<x6<x7

简化一下就是:

18<x1<22.5
x2=90-3x1
x3=2x1
x4=90-2x1
x5=3x1
x6=90-x1
x7=90

根据组合做角度推理

推理思路:

我们先做出一个推测 x1到x7分别是20 30 40 50 60 70 90

然后再对2个长14的序列{x1 x2 x3 x4 x5 x6 x7 x1 x2 x3 x4 x5 x6 x7}和{20 30 40 50 60 70 90 20 30 40 50 60 70 90}分别枚举出,挑选哪些数加起来能达成180

其实本质上是14个数分成4组,每组和为180,所以最多只有1组有5个甚至更多的元素。

因为14个数的总和是固定的,所以我们只需要枚举数量不超过4个且加起来为180的组合。

序列{x1 x2 x3 x4 x5 x6 x7 x1 x2 x3 x4 x5 x6 x7}的枚举结果:

有16个组合加起来一定是180,分别是:

x7+x7
x1+x6+x7
x2+x5+x7
x3+x4+x7
x4+x5+x6
x3+x6+x6
x1+x2+x3+x7
x1+x1+x4+x7
x1+x1+x6+x6
x1+x2+x5+x6
x1+x3+x4+x6
x1+x4+x4+x5
x2+x2+x5+x5
x2+x3+x4+x5
x2+x3+x3+x6
x3+x3+x4+x4

还有1个组合加起来可能是180:

x2+x2+x4+x6

而这17个组合,换成序列{20 30 40 50 60 70 90 20 30 40 50 60 70 90}中的对应数,加起来都是180

所以,用20 30 40 50 60 70 90去推理魔方怎么复原是没有问题的。

PS:生产厂家为了方便,大概率取的也就是这7个值

有趣的形态

所有形态枚举(V1)

中间层固定把红色(90度)放左上角,粉色紫色蓝色(20 30 40度)放左下角,那么竖直的线就是分割线。

按照时钟的顺序,顶层的初始状态是70 60 50 40 30 20 90,底层的初始状态是50 60 70 90 20 30 40 

中间层的初始状态是0,唯一的非初始状态是1


//通用的数据缓存去重编号方案
template<typename T>
class GetSingleId
{
public:
	int id(T x) //所有元素按照首次传入顺序编号0,1,2......
	{
		auto it = m.find(x);
		if (it != m.end())return it->second;
		mr[n] = x;
		return m[x] = n++;
	}
	int num() //id()==num()-1表示是新元素,否则是重复元素
	{
		return n;
	}
	T getData(int id) //根据id获取元素数据
	{
		return mr[id];
	}
private:
	map<T, int>m;
	map<int, T>mr;
	int n = 0;
};

struct Node {
	vector<int>up{ 70,60,50,40,30,20,90 };
	int mid = 0;
	vector<int>down{ 50,60,70,90,20,30,40 };
	int ans = 0;
};

int getId(vector<int> v) {
	static GetSingleId<vector<int>> opt;
	int ans = opt.id(v);
	int len = v.size();
	while (len--) {
		v.push_back(v[0]);
		v.erase(v.begin());
		opt.id(v);
	}
	return ans;
}
int getId(const Node &nod)
{
	static GetSingleId<vector<int>> opt;
	int id1 = getId(nod.up);
	int id2 = getId(nod.down);
	return opt.id(vector<int>{id1, nod.mid, id2});
}

vector<int> findId(const vector<int>&v)
{
	vector<int>ans;
	for (int i = 0; i < v.size(); i++) {
		int s = 0;
		for (int j = i; j < i + v.size(); j++) {
			s += v[j%v.size()];
			if (s >= 180)break;
		}
		if (s == 180)ans.push_back(i);
	}
	return ans;
}

vector<Node> getNext(const Node &nod) 
{
	vector<int> id1 = findId(nod.up);
	vector<int> id2 = findId(nod.down);
	vector<Node> ans;
	for (int i : id1) {
		for (int j : id2) {
			vector<int>v1, v2;
			int k1 = i, k2 = j, s1 = 0, s2 = 0;
			while (s1 < 180) {
				v1.push_back(nod.down[k2]);
				s1 += nod.down[k2];
				k2 = (k2 + 1) % nod.down.size();
			}
			while (s2 < 180) {
				v2.push_back(nod.up[k1]);
				s2 += nod.up[k1];
				k1 = (k1 + 1) % nod.up.size();
			}
			while (k1 != i) {
				v1.push_back(nod.up[k1]);
				k1 = (k1 + 1) % nod.up.size();
			}
			while (k2 != j) {
				v2.push_back(nod.down[k2]);
				k2 = (k2 + 1) % nod.down.size();
			}
			ans.push_back({ v1,1 - nod.mid,v2,nod.ans + 1 });
		}
	}
	return ans;
}


//假设对半翻转操作是长度为1,另外2个操作是长度为0,对整个图进行bfs搜出单源最短路径
void bfs()
{
	Node nod;
	set<int>s;
	s.insert(getId(nod));
	queue<Node>q;
	q.push(nod);
	int num = 0;
	while (!q.empty()) {
		auto nod = q.front();
		num++;
		for (int x : nod.up)cout << x << " ";
		cout << endl << nod.mid << endl;
		for (int x : nod.down)cout << x << " ";
		cout << endl << nod.ans<<endl << endl;
		q.pop();
		auto v = getNext(nod);
		for (auto nod : v) {
			int id = getId(nod);
			if (s.find(id) == s.end()) {
				s.insert(id);
				q.push(nod);
			}
		}
	}
	cout << num;
}

int main() {
	bfs();
	return 0;
}

输出:

......

30 60 30 60 40 90 50
0
90 70 20 20 50 40 70
14

20 50 40 70 40 90 50
0
90 70 20 30 60 30 60
14

4032

一共4032种不同的形态,其中任意2个形态之间的转换至少需要1次大操作。

也就是说,只旋转顶层、旋转底层得到的状态已经合并了,合并后的总数是4032=63*64

显然,这个数字通过组合的方法去推也是能推出来的,当然前提是对于可达状态集有了判定方法。

最速复原跳转表(V1)

前面的输出结果已经表明,最多需要14次大操作才能复原

这里给出具体的操作路径:


//通用的数据缓存去重编号方案
template<typename T>
class GetSingleId
{
public:
	int id(T x) //所有元素按照首次传入顺序编号0,1,2......
	{
		auto it = m.find(x);
		if (it != m.end())return it->second;
		mr[n] = x;
		return m[x] = n++;
	}
	int num() //id()==num()-1表示是新元素,否则是重复元素
	{
		return n;
	}
	T getData(int id) //根据id获取元素数据
	{
		return mr[id];
	}
private:
	map<T, int>m;
	map<int, T>mr;
	int n = 0;
};

struct Node {
	vector<int>up{ 70,60,50,40,30,20,90 };
	int mid = 0;
	vector<int>down{ 50,60,70,90,20,30,40 };
	int ans = 0;
	int id = 0;
	int fa = 0;
};

int getId(vector<int> v) {
	static GetSingleId<vector<int>> opt;
	int ans = opt.id(v);
	int len = v.size();
	while (len--) {
		v.push_back(v[0]);
		v.erase(v.begin());
		opt.id(v);
	}
	return ans;
}
int getId(const Node &nod)
{
	static GetSingleId<vector<int>> opt;
	int id1 = getId(nod.up);
	int id2 = getId(nod.down);
	return opt.id(vector<int>{id1, nod.mid, id2});
}

vector<int> findId(const vector<int>&v)
{
	vector<int>ans;
	for (int i = 0; i < v.size(); i++) {
		int s = 0;
		for (int j = i; j < i + v.size(); j++) {
			s += v[j%v.size()];
			if (s >= 180)break;
		}
		if (s == 180)ans.push_back(i);
	}
	return ans;
}

vector<Node> getNext(const Node &nod) 
{
	vector<int> id1 = findId(nod.up);
	vector<int> id2 = findId(nod.down);
	vector<Node> ans;
	for (int i : id1) {
		for (int j : id2) {
			vector<int>v1, v2;
			int k1 = i, k2 = j, s1 = 0, s2 = 0;
			while (s1 < 180) {
				v1.push_back(nod.down[k2]);
				s1 += nod.down[k2];
				k2 = (k2 + 1) % nod.down.size();
			}
			while (s2 < 180) {
				v2.push_back(nod.up[k1]);
				s2 += nod.up[k1];
				k1 = (k1 + 1) % nod.up.size();
			}
			while (k1 != i) {
				v1.push_back(nod.up[k1]);
				k1 = (k1 + 1) % nod.up.size();
			}
			while (k2 != j) {
				v2.push_back(nod.down[k2]);
				k2 = (k2 + 1) % nod.down.size();
			}
			ans.push_back({ v1,1 - nod.mid,v2,nod.ans + 1,0,0 });
		}
	}
	return ans;
}


//假设对半翻转操作是长度为1,另外2个操作是长度为0,对整个图进行bfs搜出单源最短路径
void bfs()
{
	Node nod;
	set<int>s;
	s.insert(getId(nod));
	queue<Node>q;
	q.push(nod);
	while (!q.empty()) {
		auto nod = q.front();
		int fa = nod.id;
		cout << "序号="<<nod.id << "     ";
		for (int x : nod.up)cout << x << " ";
		cout << "        " << nod.mid << "       ";
		for (int x : nod.down)cout << x << " ";
		cout << "   跳转到序号" << nod.fa << endl;
		q.pop();
		auto v = getNext(nod);
		for (auto nod : v) {
			int id = getId(nod);
			if (s.find(id) == s.end()) {
				s.insert(id);
				nod.id = id;
				nod.fa = fa;
				q.push(nod);
			}
		}
	}
}

int main() {
	bfs();
	return 0;
}

输出结果:

序号=0     70 60 50 40 30 20 90         0       50 60 70 90 20 30 40    跳转到序号0
序号=1     50 60 70 40 30 20 90         1       70 60 50 90 20 30 40    跳转到序号0
序号=2     70 90 20 40 30 20 90         1       70 60 50 30 40 50 60    跳转到序号0
序号=3     90 20 30 40 40 30 20 90         1       70 60 50 50 60 70    跳转到序号0
序号=4     30 40 50 60 40 30 20 90         1       70 60 50 70 90 20    跳转到序号0
序号=5     50 60 70 20 90 70         1       60 50 40 30 90 20 30 40    跳转到序号0
序号=6     70 90 20 20 90 70         1       60 50 40 30 30 40 50 60    跳转到序号0
序号=7     90 20 30 40 20 90 70         1       60 50 40 30 50 60 70    跳转到序号0
。。。。。。
序号=4021     20 50 40 70 30 60 30 60         0       40 90 50 90 70 20    跳转到序号3887
序号=4022     90 70 20 40 90 50         0       30 60 30 60 20 50 40 70    跳转到序号3887
序号=4023     20 50 40 70 40 90 50         0       30 60 30 60 90 70 20    跳转到序号3887
序号=4024     30 60 30 60 90 70 20         0       20 50 40 70 40 90 50    跳转到序号3890
序号=4025     40 90 50 90 70 20         0       20 50 40 70 30 60 30 60    跳转到序号3890
序号=4026     30 60 30 60 20 50 40 70         0       90 70 20 40 90 50    跳转到序号3890
序号=4027     40 90 50 20 50 40 70         0       90 70 20 30 60 30 60    跳转到序号3890
序号=4028     30 60 30 60 90 70 20         0       40 90 50 20 50 40 70    跳转到序号3891
序号=4029     20 50 40 70 90 70 20         0       40 90 50 30 60 30 60    跳转到序号3891
序号=4030     30 60 30 60 40 90 50         0       90 70 20 20 50 40 70    跳转到序号3891
序号=4031     20 50 40 70 40 90 50         0       90 70 20 30 60 30 60    跳转到序号3891

篇幅太长无法发表,省略。

使用示例:

那么这就是 90 90 40 40 50 30 20         0       70 60 20 30 60 70 50  (需要适当的旋转才能在这4032个情况中找到唯一对应的那个)

对应的答案就是:

序号=2102     90 90 40 40 50 30 20         0       70 60 20 30 60 70 50    跳转到序号1495
序号=1495     20 30 40 40 50 30 20 70 60         1       90 90 60 70 50    跳转到序号753
序号=753     30 20 70 60 90 90         0       50 60 70 50 20 30 40 40    跳转到序号186
序号=186     50 60 70 90 90         1       20 30 40 40 30 20 70 60 50    跳转到序号17
序号=17     90 20 30 40 40 30 20 90         0       50 60 70 70 60 50    跳转到序号1
序号=1     50 60 70 40 30 20 90         1       70 60 50 90 20 30 40    跳转到序号0

启发式策略(单节点)(V1)

首先我们想到的策略自然是合并。

然后基于上面代码输出的4032个具体状态,我很快锁定了50+60这个组合。

(一开始我想的是类似于20+30+40或者40+50这种组合,但是并没有明确的发现)

用代码来验证一下:


//通用的数据缓存去重编号方案
template<typename T>
class GetSingleId
{
public:
	int id(T x) //所有元素按照首次传入顺序编号0,1,2......
	{
		auto it = m.find(x);
		if (it != m.end())return it->second;
		mr[n] = x;
		return m[x] = n++;
	}
	int num() //id()==num()-1表示是新元素,否则是重复元素
	{
		return n;
	}
	T getData(int id) //根据id获取元素数据
	{
		return mr[id];
	}
private:
	map<T, int>m;
	map<int, T>mr;
	int n = 0;
};

struct Node {
	vector<int>up{ 70,60,50,40,30,20,90 };
	int mid = 0;
	vector<int>down{ 50,60,70,90,20,30,40 };
	int ans = 0;
	int id = 0;
	int fa = 0;
};

int getId(vector<int> v) {
	static GetSingleId<vector<int>> opt;
	int ans = opt.id(v);
	int len = v.size();
	while (len--) {
		v.push_back(v[0]);
		v.erase(v.begin());
		opt.id(v);
	}
	return ans;
}
int getId(const Node& nod)
{
	static GetSingleId<vector<int>> opt;
	int id1 = getId(nod.up);
	int id2 = getId(nod.down);
	return opt.id(vector<int>{id1, nod.mid, id2});
}

vector<int> findId(const vector<int>& v)
{
	vector<int>ans;
	for (int i = 0; i < v.size(); i++) {
		int s = 0;
		for (int j = i; j < i + v.size(); j++) {
			s += v[j % v.size()];
			if (s >= 180)break;
		}
		if (s == 180)ans.push_back(i);
	}
	return ans;
}

vector<Node> getNext(const Node& nod)
{
	vector<int> id1 = findId(nod.up);
	vector<int> id2 = findId(nod.down);
	vector<Node> ans;
	for (int i : id1) {
		for (int j : id2) {
			vector<int>v1, v2;
			int k1 = i, k2 = j, s1 = 0, s2 = 0;
			while (s1 < 180) {
				v1.push_back(nod.down[k2]);
				s1 += nod.down[k2];
				k2 = (k2 + 1) % nod.down.size();
			}
			while (s2 < 180) {
				v2.push_back(nod.up[k1]);
				s2 += nod.up[k1];
				k1 = (k1 + 1) % nod.up.size();
			}
			while (k1 != i) {
				v1.push_back(nod.up[k1]);
				k1 = (k1 + 1) % nod.up.size();
			}
			while (k2 != j) {
				v2.push_back(nod.down[k2]);
				k2 = (k2 + 1) % nod.down.size();
			}
			ans.push_back({ v1,1 - nod.mid,v2,nod.ans + 1,0,0 });
		}
	}
	return ans;
}

//假设对半翻转操作是长度为1,另外2个操作是长度为0,对整个图进行bfs搜出单源最短路径
vector<int> bfs(vector<Node>&vn)
{
	vector<int> ans(4032);
	Node nod;
	set<int>s;
	s.insert(getId(nod));
	queue<Node>q;
	q.push(nod);
	while (!q.empty()) {
		auto nod = q.front();
		int fa = nod.id;
		int newAns = nod.ans + 1;
		ans[fa] = nod.fa;
		vn.push_back(nod);
		q.pop();
		auto v = getNext(nod);
		for (auto nod : v) {
			int id = getId(nod);
			if (s.find(id) == s.end()) {
				s.insert(id);
				nod.id = id;
				nod.fa = fa;
				nod.ans = newAns;
				q.push(nod);
			}
		}
	}
	return ans;
}

bool check56(const vector<int>& v)
{
	int s50 = 0, s60 = 0;
	for (auto x : v) {
		if (x == 50)s50++;
		if (x == 60)s60++;
	}
	if (s50 != s60)return false;
	for (int i = 0; i < v.size(); i++) {
		if (v[i] != 50 && v[i] != 60)continue;
		if (v[(i + 1) % v.size()] != 110 - v[i] && v[(i + v.size() - 1) % v.size()]  != 110 - v[i])return false;
	}
	return true;
}
bool check56(const Node& nod)
{
	return check56(nod.up) && check56(nod.down);
}

int getLen(vector<Node>& vn, vector<int>& fa, int id)
{
	int s = 0;
	while (!check56(vn[id])) {
		s++;
		id = fa[id];
	}
	return s;
}

int main() {
	vector<Node> vn;
	vector<int> fa = bfs(vn);
	for (int i = 0; i < fa.size(); i++) {
		cout << i << " " << fa[i] << endl;
	}
	int max1 = 0, max2 = 0, maxs = 0;
	for (int i = 0; i < fa.size(); i++) {
		int x = getLen(vn, fa, i);
		max1 = max(max1, x);
		max2 = max(max2, vn[i].ans - x);
		maxs = max(maxs, vn[i].ans);
	}
	cout << endl << "max:" << max1 << " " << max2 << " " << maxs;
	return 0;
}

输出:

。。。。。。

4025 3890
4026 3890
4027 3890
4028 3891
4029 3891
4030 3891
4031 3891

max:11 7 14

所以我们得到结论:所有状态的最速复原都可以分为2步,第一步是完成2组50+60的合并,第二步是彻底复原。其中的第一步,最多需要11次大操作,其中的第二步,最多需要7次大操作,而总共最多需要14次大操作。

实际上,不管选什么状态作为跳转节点,只要终点是满足状态的,我们都可以说,最速复原都可以分为2步,第一步是***,第二步是***,第一步最多需要x次大操作,第二步最多需要y次大操作,而总共最多需要14次操作。

其中,x和y都是不超过14的。x和y越大,则这个启发式策略越不具备启发性,如果x或y等于14,则完全不具备启发性。

启发式策略(双节点)(V1)

我们对上面的策略做一个细化、强化


//通用的数据缓存去重编号方案
template<typename T>
class GetSingleId
{
public:
	int id(T x) //所有元素按照首次传入顺序编号0,1,2......
	{
		auto it = m.find(x);
		if (it != m.end())return it->second;
		mr[n] = x;
		return m[x] = n++;
	}
	int num() //id()==num()-1表示是新元素,否则是重复元素
	{
		return n;
	}
	T getData(int id) //根据id获取元素数据
	{
		return mr[id];
	}
private:
	map<T, int>m;
	map<int, T>mr;
	int n = 0;
};

struct Node {
	vector<int>up{ 70,60,50,40,30,20,90 };
	int mid = 0;
	vector<int>down{ 50,60,70,90,20,30,40 };
	int ans = 0;
	int id = 0;
	int fa = 0;
};

int getId(vector<int> v) {
	static GetSingleId<vector<int>> opt;
	int ans = opt.id(v);
	int len = v.size();
	while (len--) {
		v.push_back(v[0]);
		v.erase(v.begin());
		opt.id(v);
	}
	return ans;
}
int getId(const Node& nod)
{
	static GetSingleId<vector<int>> opt;
	int id1 = getId(nod.up);
	int id2 = getId(nod.down);
	return opt.id(vector<int>{id1, nod.mid, id2});
}

vector<int> findId(const vector<int>& v)
{
	vector<int>ans;
	for (int i = 0; i < v.size(); i++) {
		int s = 0;
		for (int j = i; j < i + v.size(); j++) {
			s += v[j % v.size()];
			if (s >= 180)break;
		}
		if (s == 180)ans.push_back(i);
	}
	return ans;
}

vector<Node> getNext(const Node& nod)
{
	vector<int> id1 = findId(nod.up);
	vector<int> id2 = findId(nod.down);
	vector<Node> ans;
	for (int i : id1) {
		for (int j : id2) {
			vector<int>v1, v2;
			int k1 = i, k2 = j, s1 = 0, s2 = 0;
			while (s1 < 180) {
				v1.push_back(nod.down[k2]);
				s1 += nod.down[k2];
				k2 = (k2 + 1) % nod.down.size();
			}
			while (s2 < 180) {
				v2.push_back(nod.up[k1]);
				s2 += nod.up[k1];
				k1 = (k1 + 1) % nod.up.size();
			}
			while (k1 != i) {
				v1.push_back(nod.up[k1]);
				k1 = (k1 + 1) % nod.up.size();
			}
			while (k2 != j) {
				v2.push_back(nod.down[k2]);
				k2 = (k2 + 1) % nod.down.size();
			}
			ans.push_back({ v1,1 - nod.mid,v2,nod.ans + 1,0,0 });
		}
	}
	return ans;
}

//假设对半翻转操作是长度为1,另外2个操作是长度为0,对整个图进行bfs搜出单源最短路径
vector<int> bfs(vector<Node>&vn)
{
	vector<int> ans(4032);
	Node nod;
	set<int>s;
	s.insert(getId(nod));
	queue<Node>q;
	q.push(nod);
	while (!q.empty()) {
		auto nod = q.front();
		int fa = nod.id;
		int newAns = nod.ans + 1;
		ans[fa] = nod.fa;
		vn.push_back(nod);
		q.pop();
		auto v = getNext(nod);
		for (auto nod : v) {
			int id = getId(nod);
			if (s.find(id) == s.end()) {
				s.insert(id);
				nod.id = id;
				nod.fa = fa;
				nod.ans = newAns;
				q.push(nod);
			}
		}
	}
	return ans;
}

bool check5656(const vector<int>& v)
{
	int s50 = 0, s60 = 0;
	for (auto x : v) {
		if (x == 50)s50++;
		if (x == 60)s60++;
	}
	if (s50 != s60)return false;
	for (int i = 0; i < v.size(); i++) {
		if (v[i] != 50 && v[i] != 60)continue;
		if (v[(i + 1) % v.size()] != 110 - v[i] && v[(i + v.size() - 1) % v.size()] != 110 - v[i])return false;
	}
	return true;
}
bool check5656(const Node& nod)
{
	return check5656(nod.up) && check5656(nod.down);
}
bool check56(const vector<int>& v)
{
	for (int i = 0; i < v.size(); i++) {
		if (v[i] != 50 && v[i] != 60)continue;
		if (v[(i + 1) % v.size()] == 110 - v[i])return true;
	}
	return false;
}
bool check56(const Node& nod)
{
	return check56(nod.up) || check56(nod.down);
}

void getLen(vector<Node>& vn, vector<int>& fa, int id,int &len1,int &len2)
{
	int id0 = id;
	len1 = 0, len2 = 0;
	while (!check56(vn[id])) {
		len1++;
		id = fa[id];
	}
	while (!check5656(vn[id])) {
		len2++;
		id = fa[id];
	}
	cout << id0<<" "<< len1 << " " << len2 << " " << vn[id0].ans - len1 - len2 << endl;
}

int main() {
	vector<Node> vn;
	vector<int> fa = bfs(vn);
	for (int i = 0; i < fa.size(); i++) {
		cout << i << " " << fa[i] << endl;
	}
	int max1 = 0, max2 = 0, max3=0,maxs = 0;
	for (int i = 0; i < fa.size(); i++) {
		int len1, len2;
		getLen(vn, fa, i, len1, len2);
		max1 = max(max1, len1);
		max2 = max(max2, len2);
		max3 = max(max3, vn[i].ans - len1 - len2);
		maxs = max(maxs, vn[i].ans);
	}
	cout << endl << "max:" << max1 << " " << max2 << " "<< max3<<" " << maxs;
	return 0;
}

输出:

。。。。。。

4012 1 10 3
4013 1 10 3
4014 1 10 3
4015 1 10 3
4016 8 3 3
4017 8 3 3
4018 8 3 3
4019 8 3 3
4020 8 3 3
4021 8 3 3
4022 8 3 3
4023 8 3 3
4024 8 3 3
4025 8 3 3
4026 8 3 3
4027 8 3 3
4028 8 3 3
4029 8 3 3
4030 8 3 3
4031 8 3 3

max:8 11 7 14

结果并不理想,数字还是比较大。

但是不难发现,只有极少数是形如1 10 3这样的极端数据,大部分都是8 3 3 这样比较好的数据。

对这些少部分数据进行进一步分析,也没有明显的发现。

此时,我猜想这个双节点策略可能是有效的,问题可能出在由fa组成的树,这棵树蕴含的只是其中一种最优解,不包含所有最优解的信息。

所以,我们需要重新做BFS。

重新编码时,发现对状态进行去重编号的方案有问题,以下是刷新结果。

刷新方案(V1 -> V2)

只需要更新这一个函数(另外4032这个魔鬼数字也需要改掉)

int getId(vector<int> v) {
	static map< vector<int>, int>m;
	if (m.find(v) != m.end())return m[v];
	int ans = m.size();
	int len = v.size();
	while (len--) {
		v.push_back(v[0]);
		v.erase(v.begin());
		m[v] = ans;
	}
	return ans;
}

所有形态枚举(V2)


//通用的数据缓存去重编号方案
template<typename T>
class GetSingleId
{
public:
	int id(T x) //所有元素按照首次传入顺序编号0,1,2......
	{
		auto it = m.find(x);
		if (it != m.end())return it->second;
		mr[n] = x;
		return m[x] = n++;
	}
	int num() //id()==num()-1表示是新元素,否则是重复元素
	{
		return n;
	}
	T getData(int id) //根据id获取元素数据
	{
		return mr[id];
	}
private:
	map<T, int>m;
	map<int, T>mr;
	int n = 0;
};

struct Node {
	vector<int>up{ 70,60,50,40,30,20,90 };
	int mid = 0;
	vector<int>down{ 50,60,70,90,20,30,40 };
	int ans = 0;
};

int getId(vector<int> v) {
	static map< vector<int>, int>m;
	if (m.find(v) != m.end())return m[v];
	int ans = m.size();
	int len = v.size();
	while (len--) {
		v.push_back(v[0]);
		v.erase(v.begin());
		m[v] = ans;
	}
	return ans;
}
int getId(const Node &nod)
{
	static GetSingleId<vector<int>> opt;
	int id1 = getId(nod.up);
	int id2 = getId(nod.down);
	return opt.id(vector<int>{id1, nod.mid, id2});
}

vector<int> findId(const vector<int>&v)
{
	vector<int>ans;
	for (int i = 0; i < v.size(); i++) {
		int s = 0;
		for (int j = i; j < i + v.size(); j++) {
			s += v[j%v.size()];
			if (s >= 180)break;
		}
		if (s == 180)ans.push_back(i);
	}
	return ans;
}

vector<Node> getNext(const Node &nod)
{
	vector<int> id1 = findId(nod.up);
	vector<int> id2 = findId(nod.down);
	vector<Node> ans;
	for (int i : id1) {
		for (int j : id2) {
			vector<int>v1, v2;
			int k1 = i, k2 = j, s1 = 0, s2 = 0;
			while (s1 < 180) {
				v1.push_back(nod.down[k2]);
				s1 += nod.down[k2];
				k2 = (k2 + 1) % nod.down.size();
			}
			while (s2 < 180) {
				v2.push_back(nod.up[k1]);
				s2 += nod.up[k1];
				k1 = (k1 + 1) % nod.up.size();
			}
			while (k1 != i) {
				v1.push_back(nod.up[k1]);
				k1 = (k1 + 1) % nod.up.size();
			}
			while (k2 != j) {
				v2.push_back(nod.down[k2]);
				k2 = (k2 + 1) % nod.down.size();
			}
			ans.push_back({ v1,1 - nod.mid,v2,nod.ans + 1 });
		}
	}
	return ans;
}


//假设对半翻转操作是长度为1,另外2个操作是长度为0,对整个图进行bfs搜出单源最短路径
void bfs()
{
	Node nod;
	set<int>s;
	s.insert(getId(nod));
	queue<Node>q;
	q.push(nod);
	int num = 0;
	while (!q.empty()) {
		auto nod = q.front();
		num++;
		for (int x : nod.up)cout << x << " ";
		cout << endl << nod.mid << endl;
		for (int x : nod.down)cout << x << " ";
		cout << endl << nod.ans << endl << endl;
		q.pop();
		auto v = getNext(nod);
		for (auto nod : v) {
			int id = getId(nod);
			if (s.find(id) == s.end()) {
				s.insert(id);
				q.push(nod);
			}
		}
	}
	cout << num;
}

int main() {
	bfs();
	return 0;
}

输出:

。。。。。。

40 90 50 30 60 30 60
1
90 70 20 20 50 40 70
13

20 50 40 70 90 70 20
1
30 60 30 60 40 90 50
13

40 90 50 90 70 20
1
30 60 30 60 20 50 40 70
13

652

一共652种不同的形态,其中任意2个形态之间的转换至少需要1次大操作。

最速复原跳转表(V2)

前面的输出结果已经表明,最多需要13次大操作才能复原

这里给出具体的操作路径:



//通用的数据缓存去重编号方案
template<typename T>
class GetSingleId
{
public:
	int id(T x) //所有元素按照首次传入顺序编号0,1,2......
	{
		auto it = m.find(x);
		if (it != m.end())return it->second;
		mr[n] = x;
		return m[x] = n++;
	}
	int num() //id()==num()-1表示是新元素,否则是重复元素
	{
		return n;
	}
	T getData(int id) //根据id获取元素数据
	{
		return mr[id];
	}
private:
	map<T, int>m;
	map<int, T>mr;
	int n = 0;
};

struct Node {
	vector<int>up{ 70,60,50,40,30,20,90 };
	int mid = 0;
	vector<int>down{ 50,60,70,90,20,30,40 };
	int ans = 0;
	int id = 0;
	int fa = 0;
};

int getId(vector<int> v) {
	static map< vector<int>, int>m;
	if (m.find(v) != m.end())return m[v];
	int ans = m.size();
	int len = v.size();
	while (len--) {
		v.push_back(v[0]);
		v.erase(v.begin());
		m[v] = ans;
	}
	return ans;
}
int getId(const Node &nod)
{
	static GetSingleId<vector<int>> opt;
	int id1 = getId(nod.up);
	int id2 = getId(nod.down);
	return opt.id(vector<int>{id1, nod.mid, id2});
}

vector<int> findId(const vector<int>&v)
{
	vector<int>ans;
	for (int i = 0; i < v.size(); i++) {
		int s = 0;
		for (int j = i; j < i + v.size(); j++) {
			s += v[j%v.size()];
			if (s >= 180)break;
		}
		if (s == 180)ans.push_back(i);
	}
	return ans;
}

vector<Node> getNext(const Node &nod)
{
	vector<int> id1 = findId(nod.up);
	vector<int> id2 = findId(nod.down);
	vector<Node> ans;
	for (int i : id1) {
		for (int j : id2) {
			vector<int>v1, v2;
			int k1 = i, k2 = j, s1 = 0, s2 = 0;
			while (s1 < 180) {
				v1.push_back(nod.down[k2]);
				s1 += nod.down[k2];
				k2 = (k2 + 1) % nod.down.size();
			}
			while (s2 < 180) {
				v2.push_back(nod.up[k1]);
				s2 += nod.up[k1];
				k1 = (k1 + 1) % nod.up.size();
			}
			while (k1 != i) {
				v1.push_back(nod.up[k1]);
				k1 = (k1 + 1) % nod.up.size();
			}
			while (k2 != j) {
				v2.push_back(nod.down[k2]);
				k2 = (k2 + 1) % nod.down.size();
			}
			ans.push_back({ v1,1 - nod.mid,v2,nod.ans + 1,0,0 });
		}
	}
	return ans;
}


//假设对半翻转操作是长度为1,另外2个操作是长度为0,对整个图进行bfs搜出单源最短路径
void bfs()
{
	Node nod;
	set<int>s;
	s.insert(getId(nod));
	queue<Node>q;
	q.push(nod);
	while (!q.empty()) {
		auto nod = q.front();
		int fa = nod.id;
		cout << "序号=" << nod.id << "     ";
		for (int x : nod.up)cout << x << " ";
		cout << "        " << nod.mid << "       ";
		for (int x : nod.down)cout << x << " ";
		cout << "   跳转到序号" << nod.fa << endl;
		q.pop();
		auto v = getNext(nod);
		for (auto nod : v) {
			int id = getId(nod);
			if (s.find(id) == s.end()) {
				s.insert(id);
				nod.id = id;
				nod.fa = fa;
				q.push(nod);
			}
		}
	}
}

int main() {
	bfs();
	return 0;
}

输出:

序号=0     70 60 50 40 30 20 90         0       50 60 70 90 20 30 40    跳转到序号0
序号=1     50 60 70 40 30 20 90         1       70 60 50 90 20 30 40    跳转到序号0
序号=2     70 90 20 40 30 20 90         1       70 60 50 30 40 50 60    跳转到序号0
序号=3     90 20 30 40 40 30 20 90         1       70 60 50 50 60 70    跳转到序号0
序号=4     30 40 50 60 40 30 20 90         1       70 60 50 70 90 20    跳转到序号0
序号=5     50 60 70 20 90 70         1       60 50 40 30 90 20 30 40    跳转到序号0
序号=6     70 90 20 20 90 70         1       60 50 40 30 30 40 50 60    跳转到序号0
序号=7     90 20 30 40 20 90 70         1       60 50 40 30 50 60 70    跳转到序号0
序号=8     30 40 50 60 20 90 70         1       60 50 40 30 70 90 20    跳转到序号0
序号=9     50 60 70 70 60 50         1       40 30 20 90 90 20 30 40    跳转到序号0
序号=10     70 90 20 70 60 50         1       40 30 20 90 30 40 50 60    跳转到序号0
序号=11     90 20 30 40 70 60 50         1       40 30 20 90 50 60 70    跳转到序号0
序号=12     30 40 50 60 70 60 50         1       40 30 20 90 70 90 20    跳转到序号0
序号=13     50 60 70 60 50 40 30         1       20 90 70 90 20 30 40    跳转到序号0
序号=14     70 90 20 60 50 40 30         1       20 90 70 30 40 50 60    跳转到序号0
序号=15     90 20 30 40 60 50 40 30         1       20 90 70 50 60 70    跳转到序号0
序号=16     30 40 50 60 60 50 40 30         1       20 90 70 70 90 20    跳转到序号0
序号=17     90 20 30 40 40 30 20 90         0       50 60 70 70 60 50    跳转到序号1
序号=18     70 60 50 50 60 70         0       40 30 20 90 90 20 30 40    跳转到序号1
序号=19     90 20 30 40 50 60 70         0       40 30 20 90 70 60 50    跳转到序号1
序号=20     60 50 30 40 40 30 20 90         0       70 90 20 50 60 70    跳转到序号2
序号=21     30 40 50 60 40 30 20 90         0       70 90 20 70 60 50    跳转到序号2
序号=22     50 60 70 40 30 20 90         0       70 90 20 60 50 30 40    跳转到序号2
序号=23     70 60 50 20 90 70         0       90 20 40 30 30 40 50 60    跳转到序号2
序号=24     60 50 30 40 20 90 70         0       90 20 40 30 50 60 70    跳转到序号2
序号=25     30 40 50 60 20 90 70         0       90 20 40 30 70 60 50    跳转到序号2
序号=26     50 60 70 20 90 70         0       90 20 40 30 60 50 30 40    跳转到序号2
序号=27     70 60 50 70 90 20         0       40 30 20 90 30 40 50 60    跳转到序号2
序号=28     60 50 30 40 70 90 20         0       40 30 20 90 50 60 70    跳转到序号2
序号=29     50 60 70 70 90 20         0       40 30 20 90 60 50 30 40    跳转到序号2
序号=30     70 60 50 90 20 40 30         0       20 90 70 30 40 50 60    跳转到序号2
序号=31     60 50 30 40 90 20 40 30         0       20 90 70 50 60 70    跳转到序号2
序号=32     30 40 50 60 90 20 40 30         0       20 90 70 70 60 50    跳转到序号2
序号=33     50 60 70 90 20 40 30         0       20 90 70 60 50 30 40    跳转到序号2
序号=34     50 60 70 40 30 20 90         0       90 20 30 40 70 60 50    跳转到序号3
序号=35     70 60 50 90 90         0       20 30 40 40 30 20 50 60 70    跳转到序号3
序号=36     50 60 70 90 90         0       20 30 40 40 30 20 70 60 50    跳转到序号3
序号=37     70 60 50 90 20 30 40         0       40 30 20 90 50 60 70    跳转到序号3
序号=38     70 60 50 20 30 40 40 30 20         0       90 90 50 60 70    跳转到序号3
序号=39     50 60 70 20 30 40 40 30 20         0       90 90 70 60 50    跳转到序号3
序号=40     60 50 70 40 30 20 90         0       30 40 50 60 90 20 70    跳转到序号4
序号=41     70 90 20 40 30 20 90         0       30 40 50 60 70 60 50    跳转到序号4
序号=42     90 20 70 40 30 20 90         0       30 40 50 60 60 50 70    跳转到序号4
序号=43     70 60 50 20 90 30 40         0       50 60 40 30 70 90 20    跳转到序号4
序号=44     60 50 70 20 90 30 40         0       50 60 40 30 90 20 70    跳转到序号4
序号=45     70 90 20 20 90 30 40         0       50 60 40 30 70 60 50    跳转到序号4
序号=46     90 20 70 20 90 30 40         0       50 60 40 30 60 50 70    跳转到序号4
序号=47     70 60 50 30 40 50 60         0       40 30 20 90 70 90 20    跳转到序号4
序号=48     60 50 70 30 40 50 60         0       40 30 20 90 90 20 70    跳转到序号4
序号=49     90 20 70 30 40 50 60         0       40 30 20 90 60 50 70    跳转到序号4
序号=50     70 60 50 50 60 40 30         0       20 90 30 40 70 90 20    跳转到序号4
序号=51     60 50 70 50 60 40 30         0       20 90 30 40 90 20 70    跳转到序号4
序号=52     70 90 20 50 60 40 30         0       20 90 30 40 70 60 50    跳转到序号4
序号=53     90 20 70 50 60 40 30         0       20 90 30 40 60 50 70    跳转到序号4
序号=54     40 30 90 20 20 90 70         0       50 60 70 30 40 60 50    跳转到序号5
序号=55     90 20 30 40 20 90 70         0       50 60 70 60 50 40 30    跳转到序号5
序号=56     30 40 60 50 20 90 70         0       50 60 70 40 30 90 20    跳转到序号5
序号=57     60 50 40 30 70 50 60         0       70 20 90 90 20 30 40    跳转到序号5
序号=58     90 20 30 40 70 50 60         0       70 20 90 60 50 40 30    跳转到序号5
序号=59     30 40 60 50 70 50 60         0       70 20 90 40 30 90 20    跳转到序号5
序号=60     60 50 40 30 50 60 70         0       20 90 70 90 20 30 40    跳转到序号5
序号=61     40 30 90 20 50 60 70         0       20 90 70 30 40 60 50    跳转到序号5
序号=62     30 40 60 50 50 60 70         0       20 90 70 40 30 90 20    跳转到序号5
序号=63     60 50 40 30 70 20 90         0       70 50 60 90 20 30 40    跳转到序号5
序号=64     40 30 90 20 70 20 90         0       70 50 60 30 40 60 50    跳转到序号5
序号=65     90 20 30 40 70 20 90         0       70 50 60 60 50 40 30    跳转到序号5
序号=66     30 40 50 60 20 90 70         0       70 90 20 60 50 40 30    跳转到序号6
序号=67     60 50 40 30 70 90 20         0       20 90 70 30 40 50 60    跳转到序号6
序号=68     40 30 50 60 20 90 70         0       90 20 30 40 70 60 50    跳转到序号7
序号=69     50 60 70 20 90 70         0       90 20 30 40 60 50 40 30    跳转到序号7
序号=70     70 60 50 20 90 70         0       90 20 30 40 40 30 50 60    跳转到序号7
序号=71     60 50 40 30 70 90 20         0       30 40 20 90 50 60 70    跳转到序号7
序号=72     50 60 70 70 90 20         0       30 40 20 90 60 50 40 30    跳转到序号7
序号=73     70 60 50 70 90 20         0       30 40 20 90 40 30 50 60    跳转到序号7
序号=74     60 50 40 30 90 20 30 40         0       20 90 70 50 60 70    跳转到序号7
序号=75     40 30 50 60 90 20 30 40         0       20 90 70 70 60 50    跳转到序号7
序号=76     70 60 50 90 20 30 40         0       20 90 70 40 30 50 60    跳转到序号7
序号=77     60 50 40 30 30 40 20 90         0       70 90 20 50 60 70    跳转到序号7
序号=78     40 30 50 60 30 40 20 90         0       70 90 20 70 60 50    跳转到序号7
序号=79     50 60 70 30 40 20 90         0       70 90 20 60 50 40 30    跳转到序号7
序号=80     70 90 20 20 90 70         0       30 40 50 60 60 50 40 30    跳转到序号8
序号=81     60 50 40 30 30 40 50 60         0       20 90 70 70 90 20    跳转到序号8
序号=82     70 60 50 40 30 20 90         1       90 20 30 40 50 60 70    跳转到序号17
序号=83     50 60 70 90 90         1       20 30 40 40 30 20 70 60 50    跳转到序号17
序号=84     70 60 50 90 90         1       20 30 40 40 30 20 50 60 70    跳转到序号17
序号=85     50 60 70 90 20 30 40         1       40 30 20 90 70 60 50    跳转到序号17
序号=86     50 60 70 20 30 40 40 30 20         1       90 90 70 60 50    跳转到序号17
序号=87     70 60 50 20 30 40 40 30 20         1       90 90 50 60 70    跳转到序号17
序号=88     50 60 70 40 30 20 90         1       60 50 30 40 70 90 20    跳转到序号20
序号=89     70 90 20 60 50 30 40         1       40 30 20 90 50 60 70    跳转到序号20
序号=90     90 20 70 40 30 20 90         1       30 40 50 60 60 50 70    跳转到序号21
序号=91     60 50 70 40 30 20 90         1       30 40 50 60 90 20 70    跳转到序号21
序号=92     70 90 20 20 90 30 40         1       50 60 40 30 70 60 50    跳转到序号21
序号=93     90 20 70 20 90 30 40         1       50 60 40 30 60 50 70    跳转到序号21
序号=94     70 60 50 20 90 30 40         1       50 60 40 30 70 90 20    跳转到序号21
序号=95     60 50 70 20 90 30 40         1       50 60 40 30 90 20 70    跳转到序号21
序号=96     90 20 70 30 40 50 60         1       40 30 20 90 60 50 70    跳转到序号21
序号=97     60 50 70 30 40 50 60         1       40 30 20 90 90 20 70    跳转到序号21
序号=98     70 90 20 50 60 40 30         1       20 90 30 40 70 60 50    跳转到序号21
序号=99     90 20 70 50 60 40 30         1       20 90 30 40 60 50 70    跳转到序号21
序号=100     70 60 50 50 60 40 30         1       20 90 30 40 70 90 20    跳转到序号21
序号=101     60 50 70 50 60 40 30         1       20 90 30 40 90 20 70    跳转到序号21
序号=102     60 50 30 40 40 30 20 90         1       50 60 70 70 90 20    跳转到序号22
序号=103     70 90 20 50 60 70         1       40 30 20 90 60 50 30 40    跳转到序号22
序号=104     30 40 50 60 20 90 70         1       70 60 50 90 20 40 30    跳转到序号23
序号=105     90 20 40 30 70 60 50         1       20 90 70 30 40 50 60    跳转到序号23
序号=106     40 30 50 60 20 90 70         1       60 50 30 40 70 90 20    跳转到序号24
序号=107     50 60 70 20 90 70         1       60 50 30 40 90 20 40 30    跳转到序号24
序号=108     70 90 20 20 90 70         1       60 50 30 40 40 30 50 60    跳转到序号24
序号=109     90 20 40 30 70 60 50         1       30 40 20 90 50 60 70    跳转到序号24
序号=110     50 60 70 70 60 50         1       30 40 20 90 90 20 40 30    跳转到序号24
序号=111     70 90 20 70 60 50         1       30 40 20 90 40 30 50 60    跳转到序号24
序号=112     90 20 40 30 60 50 30 40         1       20 90 70 50 60 70    跳转到序号24
序号=113     40 30 50 60 60 50 30 40         1       20 90 70 70 90 20    跳转到序号24
序号=114     70 90 20 60 50 30 40         1       20 90 70 40 30 50 60    跳转到序号24
序号=115     90 20 40 30 30 40 20 90         1       70 60 50 50 60 70    跳转到序号24
序号=116     40 30 50 60 30 40 20 90         1       70 60 50 70 90 20    跳转到序号24
序号=117     50 60 70 30 40 20 90         1       70 60 50 90 20 40 30    跳转到序号24
序号=118     70 60 50 20 90 70         1       30 40 50 60 90 20 40 30    跳转到序号25
序号=119     90 20 40 30 30 40 50 60         1       20 90 70 70 60 50    跳转到序号25
序号=120     40 30 60 50 20 90 70         1       50 60 70 30 40 90 20    跳转到序号26
序号=121     60 50 30 40 20 90 70         1       50 60 70 90 20 40 30    跳转到序号26
序号=122     30 40 90 20 20 90 70         1       50 60 70 40 30 60 50    跳转到序号26
序号=123     90 20 40 30 70 50 60         1       70 20 90 60 50 30 40    跳转到序号26
序号=124     60 50 30 40 70 50 60         1       70 20 90 90 20 40 30    跳转到序号26
序号=125     30 40 90 20 70 50 60         1       70 20 90 40 30 60 50    跳转到序号26
序号=126     90 20 40 30 50 60 70         1       20 90 70 60 50 30 40    跳转到序号26
序号=127     40 30 60 50 50 60 70         1       20 90 70 30 40 90 20    跳转到序号26
序号=128     30 40 90 20 50 60 70         1       20 90 70 40 30 60 50    跳转到序号26
序号=129     90 20 40 30 70 20 90         1       70 50 60 60 50 30 40    跳转到序号26
序号=130     40 30 60 50 70 20 90         1       70 50 60 30 40 90 20    跳转到序号26
序号=131     60 50 30 40 70 20 90         1       70 50 60 90 20 40 30    跳转到序号26
序号=132     40 40 30 20 50 90 90         1       70 60 50 60 70 20 30    跳转到序号35
序号=133     60 70 20 30 90 90         1       70 60 50 40 40 30 20 50    跳转到序号35
序号=134     40 40 30 20 50 70 60 50         1       90 90 60 70 20 30    跳转到序号35
序号=135     60 70 20 30 70 60 50         1       90 90 40 40 30 20 50    跳转到序号35
序号=136     30 20 70 60 90 90         1       50 60 70 50 20 30 40 40    跳转到序号36
序号=137     50 20 30 40 40 90 90         1       50 60 70 30 20 70 60    跳转到序号36
序号=138     30 20 70 60 50 60 70         1       90 90 50 20 30 40 40    跳转到序号36
序号=139     50 20 30 40 40 50 60 70         1       90 90 30 20 70 60    跳转到序号36
序号=140     30 40 50 60 90 90         1       20 70 40 30 20 60 50 70    跳转到序号42
序号=141     60 50 70 90 90         1       20 70 40 30 20 30 40 50 60    跳转到序号42
序号=142     30 40 50 60 20 70 40 30 20         1       90 90 60 50 70    跳转到序号42
序号=143     60 50 70 20 70 40 30 20         1       90 90 30 40 50 60    跳转到序号42
序号=144     40 30 90 20 20 90 30 40         1       60 50 70 70 50 60    跳转到序号44
序号=145     70 50 60 20 90 30 40         1       60 50 70 40 30 90 20    跳转到序号44
序号=146     50 60 40 30 30 40 60 50         1       70 20 90 90 20 70    跳转到序号44
序号=147     90 20 70 30 40 60 50         1       70 20 90 50 60 40 30    跳转到序号44
序号=148     70 50 60 30 40 60 50         1       70 20 90 40 30 90 20    跳转到序号44
序号=149     40 30 90 20 60 50 70         1       20 90 30 40 70 50 60    跳转到序号44
序号=150     70 50 60 60 50 70         1       20 90 30 40 40 30 90 20    跳转到序号44
序号=151     50 60 40 30 70 20 90         1       30 40 60 50 90 20 70    跳转到序号44
序号=152     40 30 90 20 70 20 90         1       30 40 60 50 70 50 60    跳转到序号44
序号=153     90 20 70 70 20 90         1       30 40 60 50 50 60 40 30    跳转到序号44
序号=154     40 30 60 50 20 90 30 40         1       90 20 70 70 50 60    跳转到序号46
序号=155     70 50 60 20 90 30 40         1       90 20 70 40 30 60 50    跳转到序号46
序号=156     50 60 40 30 30 40 90 20         1       70 20 90 60 50 70    跳转到序号46
序号=157     60 50 70 30 40 90 20         1       70 20 90 50 60 40 30    跳转到序号46
序号=158     40 30 60 50 90 20 70         1       20 90 30 40 70 50 60    跳转到序号46
序号=159     70 50 60 90 20 70         1       20 90 30 40 40 30 60 50    跳转到序号46
序号=160     50 60 40 30 70 20 90         1       30 40 90 20 60 50 70    跳转到序号46
序号=161     60 50 70 70 20 90         1       30 40 90 20 50 60 40 30    跳转到序号46
序号=162     30 40 60 50 20 90 70         1       40 30 90 20 50 60 70    跳转到序号54
序号=163     50 60 70 40 30 90 20         1       20 90 70 30 40 60 50    跳转到序号54
序号=164     70 60 50 20 90 70         1       90 20 30 40 40 30 50 60    跳转到序号55
序号=165     40 30 50 60 20 90 70         1       90 20 30 40 70 60 50    跳转到序号55
序号=166     50 60 70 70 90 20         1       30 40 20 90 60 50 40 30    跳转到序号55
序号=167     60 50 40 30 70 90 20         1       30 40 20 90 50 60 70    跳转到序号55
序号=168     70 60 50 90 20 30 40         1       20 90 70 40 30 50 60    跳转到序号55
序号=169     40 30 50 60 90 20 30 40         1       20 90 70 70 60 50    跳转到序号55
序号=170     50 60 70 30 40 20 90         1       70 90 20 60 50 40 30    跳转到序号55
序号=171     60 50 40 30 30 40 20 90         1       70 90 20 50 60 70    跳转到序号55
序号=172     40 30 90 20 20 90 70         1       30 40 60 50 50 60 70    跳转到序号56
序号=173     50 60 70 30 40 60 50         1       20 90 70 40 30 90 20    跳转到序号56
序号=174     90 90 70 50 60         1       60 50 40 30 20 30 40 70 20    跳转到序号57
序号=175     90 20 30 40 70 50 60         1       60 50 40 30 70 20 90    跳转到序号57
序号=176     20 30 40 70 20 70 50 60         1       60 50 40 30 90 90    跳转到序号57
序号=177     70 20 90 60 50 40 30         1       70 50 60 90 20 30 40    跳转到序号57
序号=178     90 90 60 50 40 30         1       70 50 60 20 30 40 70 20    跳转到序号57
序号=179     20 30 40 70 20 60 50 40 30         1       70 50 60 90 90    跳转到序号57
序号=180     60 50 40 30 70 50 60         1       90 20 30 40 70 20 90    跳转到序号58
序号=181     70 20 90 90 20 30 40         1       70 50 60 60 50 40 30    跳转到序号58
序号=182     20 90 40 30 70 50 60         1       30 40 60 50 90 20 70    跳转到序号59
序号=183     90 20 70 70 50 60         1       30 40 60 50 20 90 40 30    跳转到序号59
序号=184     70 20 90 50 60 30 40         1       60 50 70 40 30 90 20    跳转到序号59
序号=185     40 30 90 20 50 60 30 40         1       60 50 70 70 20 90    跳转到序号59
序号=186     20 90 40 30 30 40 60 50         1       70 50 60 90 20 70    跳转到序号59
序号=187     90 20 70 30 40 60 50         1       70 50 60 20 90 40 30    跳转到序号59
序号=188     70 20 90 60 50 70         1       50 60 30 40 40 30 90 20    跳转到序号59
序号=189     40 30 90 20 60 50 70         1       50 60 30 40 70 20 90    跳转到序号59
序号=190     20 90 40 30 70 90 20         1       70 60 50 50 60 30 40    跳转到序号73
序号=191     50 60 30 40 70 90 20         1       70 60 50 20 90 40 30    跳转到序号73
序号=192     30 40 20 90 90 20 70         1       60 50 70 40 30 50 60    跳转到序号73
序号=193     40 30 50 60 90 20 70         1       60 50 70 30 40 20 90    跳转到序号73
序号=194     20 90 40 30 70 60 50         1       70 90 20 50 60 30 40    跳转到序号73
序号=195     50 60 30 40 70 60 50         1       70 90 20 20 90 40 30    跳转到序号73
序号=196     30 40 20 90 60 50 70         1       90 20 70 40 30 50 60    跳转到序号73
序号=197     40 30 50 60 60 50 70         1       90 20 70 30 40 20 90    跳转到序号73
序号=198     30 20 70 60 90 90         0       50 60 70 50 20 30 40 40    跳转到序号83
序号=199     50 20 30 40 40 90 90         0       50 60 70 30 20 70 60    跳转到序号83
序号=200     30 20 70 60 50 60 70         0       90 90 50 20 30 40 40    跳转到序号83
序号=201     50 20 30 40 40 50 60 70         0       90 90 30 20 70 60    跳转到序号83
序号=202     40 40 30 20 50 90 90         0       70 60 50 60 70 20 30    跳转到序号84
序号=203     60 70 20 30 90 90         0       70 60 50 40 40 30 20 50    跳转到序号84
序号=204     40 40 30 20 50 70 60 50         0       90 90 60 70 20 30    跳转到序号84
序号=205     60 70 20 30 70 60 50         0       90 90 40 40 30 20 50    跳转到序号84
序号=206     30 40 50 60 90 90         0       20 70 40 30 20 60 50 70    跳转到序号90
序号=207     60 50 70 90 90         0       20 70 40 30 20 30 40 50 60    跳转到序号90
序号=208     30 40 50 60 20 70 40 30 20         0       90 90 60 50 70    跳转到序号90
序号=209     60 50 70 20 70 40 30 20         0       90 90 30 40 50 60    跳转到序号90
序号=210     40 30 60 50 20 90 30 40         0       90 20 70 70 50 60    跳转到序号93
序号=211     70 50 60 20 90 30 40         0       90 20 70 40 30 60 50    跳转到序号93
序号=212     50 60 40 30 30 40 90 20         0       70 20 90 60 50 70    跳转到序号93
序号=213     60 50 70 30 40 90 20         0       70 20 90 50 60 40 30    跳转到序号93
序号=214     70 50 60 30 40 90 20         0       70 20 90 40 30 60 50    跳转到序号93
序号=215     40 30 60 50 90 20 70         0       20 90 30 40 70 50 60    跳转到序号93
序号=216     70 50 60 90 20 70         0       20 90 30 40 40 30 60 50    跳转到序号93
序号=217     50 60 40 30 70 20 90         0       30 40 90 20 60 50 70    跳转到序号93
序号=218     40 30 60 50 70 20 90         0       30 40 90 20 70 50 60    跳转到序号93
序号=219     60 50 70 70 20 90         0       30 40 90 20 50 60 40 30    跳转到序号93
序号=220     40 30 90 20 20 90 30 40         0       60 50 70 70 50 60    跳转到序号95
序号=221     70 50 60 20 90 30 40         0       60 50 70 40 30 90 20    跳转到序号95
序号=222     50 60 40 30 30 40 60 50         0       70 20 90 90 20 70    跳转到序号95
序号=223     90 20 70 30 40 60 50         0       70 20 90 50 60 40 30    跳转到序号95
序号=224     40 30 90 20 60 50 70         0       20 90 30 40 70 50 60    跳转到序号95
序号=225     70 50 60 60 50 70         0       20 90 30 40 40 30 90 20    跳转到序号95
序号=226     50 60 40 30 70 20 90         0       30 40 60 50 90 20 70    跳转到序号95
序号=227     90 20 70 70 20 90         0       30 40 60 50 50 60 40 30    跳转到序号95
序号=228     70 90 20 20 90 70         0       40 30 50 60 60 50 30 40    跳转到序号106
序号=229     60 50 30 40 40 30 50 60         0       20 90 70 70 90 20    跳转到序号106
序号=230     30 40 90 20 20 90 70         0       50 60 70 40 30 60 50    跳转到序号107
序号=231     40 30 60 50 20 90 70         0       50 60 70 30 40 90 20    跳转到序号107
序号=232     60 50 30 40 70 50 60         0       70 20 90 90 20 40 30    跳转到序号107
序号=233     90 20 40 30 70 50 60         0       70 20 90 60 50 30 40    跳转到序号107
序号=234     30 40 90 20 50 60 70         0       20 90 70 40 30 60 50    跳转到序号107
序号=235     40 30 60 50 50 60 70         0       20 90 70 30 40 90 20    跳转到序号107
序号=236     60 50 30 40 70 20 90         0       70 50 60 90 20 40 30    跳转到序号107
序号=237     90 20 40 30 70 20 90         0       70 50 60 60 50 30 40    跳转到序号107
序号=238     40 30 50 60 20 90 70         0       70 90 20 60 50 30 40    跳转到序号108
序号=239     60 50 30 40 70 90 20         0       20 90 70 40 30 50 60    跳转到序号108
序号=240     50 60 70 70 60 50         0       90 20 40 30 30 40 20 90    跳转到序号109
序号=241     30 40 20 90 90 20 40 30         0       70 60 50 50 60 70    跳转到序号109
序号=242     90 90 70 60 50         0       50 60 70 20 40 30 30 40 20    跳转到序号110
序号=243     90 20 40 30 70 60 50         0       50 60 70 30 40 20 90    跳转到序号110
序号=244     20 40 30 30 40 20 70 60 50         0       50 60 70 90 90    跳转到序号110
序号=245     30 40 20 90 50 60 70         0       70 60 50 90 20 40 30    跳转到序号110
序号=246     90 90 50 60 70         0       70 60 50 20 40 30 30 40 20    跳转到序号110
序号=247     20 40 30 30 40 20 50 60 70         0       70 60 50 90 90    跳转到序号110
序号=248     20 90 40 30 70 60 50         0       70 90 20 50 60 30 40    跳转到序号111
序号=249     50 60 30 40 70 60 50         0       70 90 20 20 90 40 30    跳转到序号111
序号=250     30 40 20 90 60 50 70         0       90 20 70 40 30 50 60    跳转到序号111
序号=251     40 30 50 60 60 50 70         0       90 20 70 30 40 20 90    跳转到序号111
序号=252     20 90 40 30 70 90 20         0       70 60 50 50 60 30 40    跳转到序号111
序号=253     50 60 30 40 70 90 20         0       70 60 50 20 90 40 30    跳转到序号111
序号=254     30 40 20 90 90 20 70         0       60 50 70 40 30 50 60    跳转到序号111
序号=255     40 30 50 60 90 20 70         0       60 50 70 30 40 20 90    跳转到序号111
序号=256     90 90 70 50 60         0       60 50 30 40 20 40 30 70 20    跳转到序号124
序号=257     20 40 30 70 20 70 50 60         0       60 50 30 40 90 90    跳转到序号124
序号=258     90 90 60 50 30 40         0       70 50 60 20 40 30 70 20    跳转到序号124
序号=259     20 40 30 70 20 60 50 30 40         0       70 50 60 90 90    跳转到序号124
序号=260     20 90 40 30 70 50 60         0       30 40 90 20 60 50 70    跳转到序号125
序号=261     60 50 70 70 50 60         0       30 40 90 20 20 90 40 30    跳转到序号125
序号=262     70 20 90 50 60 30 40         0       90 20 70 40 30 60 50    跳转到序号125
序号=263     40 30 60 50 50 60 30 40         0       90 20 70 70 20 90    跳转到序号125
序号=264     20 90 40 30 30 40 90 20         0       70 50 60 60 50 70    跳转到序号125
序号=265     60 50 70 30 40 90 20         0       70 50 60 20 90 40 30    跳转到序号125
序号=266     70 20 90 90 20 70         0       50 60 30 40 40 30 60 50    跳转到序号125
序号=267     40 30 60 50 90 20 70         0       50 60 30 40 70 20 90    跳转到序号125
序号=268     50 60 70 90 90         0       40 40 30 20 50 20 30 70 60    跳转到序号132
序号=269     20 30 70 60 90 90         0       40 40 30 20 50 50 60 70    跳转到序号132
序号=270     50 60 70 40 40 30 20 50         0       90 90 20 30 70 60    跳转到序号132
序号=271     20 30 70 60 40 40 30 20 50         0       90 90 50 60 70    跳转到序号132
序号=272     50 40 40 30 20 90 90         0       60 70 20 30 50 70 60    跳转到序号133
序号=273     50 70 60 90 90         0       60 70 20 30 50 40 40 30 20    跳转到序号133
序号=274     50 40 40 30 20 60 70 20 30         0       90 90 50 70 60    跳转到序号133
序号=275     50 70 60 60 70 20 30         0       90 90 50 40 40 30 20    跳转到序号133
序号=276     60 70 50 90 90         0       30 20 70 60 20 30 40 40 50    跳转到序号136
序号=277     20 30 40 40 50 90 90         0       30 20 70 60 60 70 50    跳转到序号136
序号=278     60 70 50 30 20 70 60         0       90 90 20 30 40 40 50    跳转到序号136
序号=279     20 30 40 40 50 30 20 70 60         0       90 90 60 70 50    跳转到序号136
序号=280     60 70 30 20 90 90         0       50 20 30 40 40 70 60 50    跳转到序号137
序号=281     70 60 50 90 90         0       50 20 30 40 40 60 70 30 20    跳转到序号137
序号=282     60 70 30 20 50 20 30 40 40         0       90 90 70 60 50    跳转到序号137
序号=283     70 60 50 50 20 30 40 40         0       90 90 60 70 30 20    跳转到序号137
序号=284     90 90 30 40 60 50         0       50 60 40 30 20 70 70 20    跳转到序号146
序号=285     20 70 70 20 30 40 60 50         0       50 60 40 30 90 90    跳转到序号146
序号=286     90 90 50 60 40 30         0       30 40 60 50 20 70 70 20    跳转到序号146
序号=287     20 70 70 20 50 60 40 30         0       30 40 60 50 90 90    跳转到序号146
序号=288     20 90 40 30 30 40 60 50         0       70 50 60 90 20 70    跳转到序号148
序号=289     90 20 70 30 40 60 50         0       70 50 60 20 90 40 30    跳转到序号148
序号=290     70 20 90 60 50 70         0       50 60 30 40 40 30 90 20    跳转到序号148
序号=291     40 30 90 20 60 50 70         0       50 60 30 40 70 20 90    跳转到序号148
序号=292     20 90 40 30 70 50 60         0       30 40 60 50 90 20 70    跳转到序号148
序号=293     90 20 70 70 50 60         0       30 40 60 50 20 90 40 30    跳转到序号148
序号=294     70 20 90 50 60 30 40         0       60 50 70 40 30 90 20    跳转到序号148
序号=295     40 30 90 20 50 60 30 40         0       60 50 70 70 20 90    跳转到序号148
序号=296     20 30 40 70 20 70 50 60         0       90 90 60 50 40 30    跳转到序号174
序号=297     60 50 40 30 90 90         0       70 50 60 20 30 40 70 20    跳转到序号174
序号=298     90 90 70 50 60         0       20 30 40 70 20 60 50 40 30    跳转到序号176
序号=299     60 50 40 30 20 30 40 70 20         0       70 50 60 90 90    跳转到序号176
序号=300     60 50 70 20 70 30 40 20         0       90 90 40 30 50 60    跳转到序号192
序号=301     40 30 50 60 20 70 30 40 20         0       90 90 60 50 70    跳转到序号192
序号=302     60 50 70 90 90         0       20 70 30 40 20 40 30 50 60    跳转到序号192
序号=303     40 30 50 60 90 90         0       20 70 30 40 20 60 50 70    跳转到序号192
序号=304     60 70 50 90 90         1       30 20 70 60 20 30 40 40 50    跳转到序号198
序号=305     20 30 40 40 50 90 90         1       30 20 70 60 60 70 50    跳转到序号198
序号=306     60 70 50 30 20 70 60         1       90 90 20 30 40 40 50    跳转到序号198
序号=307     20 30 40 40 50 30 20 70 60         1       90 90 60 70 50    跳转到序号198
序号=308     60 70 30 20 90 90         1       50 20 30 40 40 70 60 50    跳转到序号199
序号=309     70 60 50 90 90         1       50 20 30 40 40 60 70 30 20    跳转到序号199
序号=310     60 70 30 20 50 20 30 40 40         1       90 90 70 60 50    跳转到序号199
序号=311     70 60 50 50 20 30 40 40         1       90 90 60 70 30 20    跳转到序号199
序号=312     50 60 70 90 90         1       40 40 30 20 50 20 30 70 60    跳转到序号202
序号=313     20 30 70 60 90 90         1       40 40 30 20 50 50 60 70    跳转到序号202
序号=314     50 60 70 40 40 30 20 50         1       90 90 20 30 70 60    跳转到序号202
序号=315     20 30 70 60 40 40 30 20 50         1       90 90 50 60 70    跳转到序号202
序号=316     50 40 40 30 20 90 90         1       60 70 20 30 50 70 60    跳转到序号203
序号=317     50 70 60 90 90         1       60 70 20 30 50 40 40 30 20    跳转到序号203
序号=318     50 40 40 30 20 60 70 20 30         1       90 90 50 70 60    跳转到序号203
序号=319     50 70 60 60 70 20 30         1       90 90 50 40 40 30 20    跳转到序号203
序号=320     20 90 40 30 30 40 90 20         1       70 50 60 60 50 70    跳转到序号214
序号=321     60 50 70 30 40 90 20         1       70 50 60 20 90 40 30    跳转到序号214
序号=322     70 20 90 90 20 70         1       50 60 30 40 40 30 60 50    跳转到序号214
序号=323     40 30 60 50 90 20 70         1       50 60 30 40 70 20 90    跳转到序号214
序号=324     20 90 40 30 70 50 60         1       30 40 90 20 60 50 70    跳转到序号214
序号=325     60 50 70 70 50 60         1       30 40 90 20 20 90 40 30    跳转到序号214
序号=326     70 20 90 50 60 30 40         1       90 20 70 40 30 60 50    跳转到序号214
序号=327     40 30 60 50 50 60 30 40         1       90 20 70 70 20 90    跳转到序号214
序号=328     90 90 30 40 60 50         1       50 60 40 30 20 70 70 20    跳转到序号222
序号=329     20 70 70 20 30 40 60 50         1       50 60 40 30 90 90    跳转到序号222
序号=330     90 90 50 60 40 30         1       30 40 60 50 20 70 70 20    跳转到序号222
序号=331     20 70 70 20 50 60 40 30         1       30 40 60 50 90 90    跳转到序号222
序号=332     90 90 70 50 60         1       60 50 30 40 20 40 30 70 20    跳转到序号232
序号=333     20 40 30 70 20 70 50 60         1       60 50 30 40 90 90    跳转到序号232
序号=334     90 90 60 50 30 40         1       70 50 60 20 40 30 70 20    跳转到序号232
序号=335     20 40 30 70 20 60 50 30 40         1       70 50 60 90 90    跳转到序号232
序号=336     20 40 30 30 40 20 70 60 50         1       50 60 70 90 90    跳转到序号240
序号=337     90 90 70 60 50         1       50 60 70 20 40 30 30 40 20    跳转到序号240
序号=338     20 40 30 30 40 20 50 60 70         1       70 60 50 90 90    跳转到序号240
序号=339     90 90 50 60 70         1       70 60 50 20 40 30 30 40 20    跳转到序号240
序号=340     20 70 30 40 20 60 50 70         1       40 30 50 60 90 90    跳转到序号251
序号=341     90 90 60 50 70         1       40 30 50 60 20 70 30 40 20    跳转到序号251
序号=342     20 70 30 40 20 40 30 50 60         1       60 50 70 90 90    跳转到序号251
序号=343     90 90 40 30 50 60         1       60 50 70 20 70 30 40 20    跳转到序号251
序号=344     50 30 40 20 40 70 50 60         1       90 90 30 70 20 60    跳转到序号256
序号=345     30 70 20 60 70 50 60         1       90 90 50 30 40 20 40    跳转到序号256
序号=346     50 30 40 20 40 90 90         1       70 50 60 30 70 20 60    跳转到序号256
序号=347     30 70 20 60 90 90         1       70 50 60 50 30 40 20 40    跳转到序号256
序号=348     20 70 70 20 50 60 30 40         1       40 30 60 50 90 90    跳转到序号263
序号=349     90 90 50 60 30 40         1       40 30 60 50 20 70 70 20    跳转到序号263
序号=350     20 70 70 20 40 30 60 50         1       50 60 30 40 90 90    跳转到序号263
序号=351     90 90 40 30 60 50         1       50 60 30 40 20 70 70 20    跳转到序号263
序号=352     20 50 50 60 90 90         1       20 30 70 60 70 40 40 30    跳转到序号269
序号=353     70 40 40 30 90 90         1       20 30 70 60 20 50 50 60    跳转到序号269
序号=354     20 50 50 60 20 30 70 60         1       90 90 70 40 40 30    跳转到序号269
序号=355     70 40 40 30 20 30 70 60         1       90 90 20 50 50 60    跳转到序号269
序号=356     60 70 20 30 90 50 40         1       40 30 20 90 50 70 60    跳转到序号272
序号=357     50 70 60 90 50 40         1       40 30 20 90 60 70 20 30    跳转到序号272
序号=358     60 70 20 30 40 30 20 90         1       90 50 40 50 70 60    跳转到序号272
序号=359     50 70 60 40 30 20 90         1       90 50 40 60 70 20 30    跳转到序号272
序号=360     20 30 50 40 40 90 90         1       50 70 60 30 20 60 70    跳转到序号273
序号=361     30 20 60 70 90 90         1       50 70 60 20 30 50 40 40    跳转到序号273
序号=362     20 30 50 40 40 50 70 60         1       90 90 30 20 60 70    跳转到序号273
序号=363     30 20 60 70 50 70 60         1       90 90 20 30 50 40 40    跳转到序号273
序号=364     70 60 20 30 90 90         1       60 70 50 40 40 50 30 20    跳转到序号276
序号=365     40 40 50 30 20 90 90         1       60 70 50 70 60 20 30    跳转到序号276
序号=366     70 60 20 30 60 70 50         1       90 90 40 40 50 30 20    跳转到序号276
序号=367     40 40 50 30 20 60 70 50         1       90 90 70 60 20 30    跳转到序号276
序号=368     30 20 70 60 90 20 30 40         1       40 50 90 60 70 50    跳转到序号277
序号=369     60 70 50 90 20 30 40         1       40 50 90 30 20 70 60    跳转到序号277
序号=370     30 20 70 60 40 50 90         1       90 20 30 40 60 70 50    跳转到序号277
序号=371     60 70 50 40 50 90         1       90 20 30 40 30 20 70 60    跳转到序号277
序号=372     30 40 40 70 90 90         1       60 70 30 20 60 50 50 20    跳转到序号280
序号=373     60 50 50 20 90 90         1       60 70 30 20 30 40 40 70    跳转到序号280
序号=374     30 40 40 70 60 70 30 20         1       90 90 60 50 50 20    跳转到序号280
序号=375     60 50 50 20 60 70 30 20         1       90 90 30 40 40 70    跳转到序号280
序号=376     90 90 40 20 40 30 50         1       60 20 70 30 60 50 70    跳转到序号301
序号=377     60 50 70 40 20 40 30 50         1       60 20 70 30 90 90    跳转到序号301
序号=378     90 90 60 20 70 30         1       40 20 40 30 50 60 50 70    跳转到序号301
序号=379     60 50 70 60 20 70 30         1       40 20 40 30 50 90 90    跳转到序号301
序号=380     70 60 20 30 90 90         0       60 70 50 40 40 50 30 20    跳转到序号304
序号=381     40 40 50 30 20 90 90         0       60 70 50 70 60 20 30    跳转到序号304
序号=382     70 60 20 30 60 70 50         0       90 90 40 40 50 30 20    跳转到序号304
序号=383     40 40 50 30 20 60 70 50         0       90 90 70 60 20 30    跳转到序号304
序号=384     30 20 70 60 90 20 30 40         0       40 50 90 60 70 50    跳转到序号305
序号=385     60 70 50 90 20 30 40         0       40 50 90 30 20 70 60    跳转到序号305
序号=386     30 20 70 60 40 50 90         0       90 20 30 40 60 70 50    跳转到序号305
序号=387     60 70 50 40 50 90         0       90 20 30 40 30 20 70 60    跳转到序号305
序号=388     30 40 40 70 90 90         0       60 70 30 20 60 50 50 20    跳转到序号308
序号=389     60 50 50 20 90 90         0       60 70 30 20 30 40 40 70    跳转到序号308
序号=390     30 40 40 70 60 70 30 20         0       90 90 60 50 50 20    跳转到序号308
序号=391     60 50 50 20 60 70 30 20         0       90 90 30 40 40 70    跳转到序号308
序号=392     20 50 50 60 90 90         0       20 30 70 60 70 40 40 30    跳转到序号313
序号=393     70 40 40 30 90 90         0       20 30 70 60 20 50 50 60    跳转到序号313
序号=394     20 50 50 60 20 30 70 60         0       90 90 70 40 40 30    跳转到序号313
序号=395     70 40 40 30 20 30 70 60         0       90 90 20 50 50 60    跳转到序号313
序号=396     60 70 20 30 90 50 40         0       40 30 20 90 50 70 60    跳转到序号316
序号=397     50 70 60 90 50 40         0       40 30 20 90 60 70 20 30    跳转到序号316
序号=398     60 70 20 30 40 30 20 90         0       90 50 40 50 70 60    跳转到序号316
序号=399     50 70 60 40 30 20 90         0       90 50 40 60 70 20 30    跳转到序号316
序号=400     20 30 50 40 40 90 90         0       50 70 60 30 20 60 70    跳转到序号317
序号=401     30 20 60 70 90 90         0       50 70 60 20 30 50 40 40    跳转到序号317
序号=402     20 30 50 40 40 50 70 60         0       90 90 30 20 60 70    跳转到序号317
序号=403     30 20 60 70 50 70 60         0       90 90 20 30 50 40 40    跳转到序号317
序号=404     50 60 30 40 20 70 70 20         0       90 90 40 30 60 50    跳转到序号322
序号=405     40 30 60 50 20 70 70 20         0       90 90 50 60 30 40    跳转到序号322
序号=406     50 60 30 40 90 90         0       20 70 70 20 40 30 60 50    跳转到序号322
序号=407     40 30 60 50 90 90         0       20 70 70 20 50 60 30 40    跳转到序号322
序号=408     50 30 40 20 40 70 50 60         0       90 90 30 70 20 60    跳转到序号332
序号=409     30 70 20 60 70 50 60         0       90 90 50 30 40 20 40    跳转到序号332
序号=410     50 30 40 20 40 90 90         0       70 50 60 30 70 20 60    跳转到序号332
序号=411     30 70 20 60 90 90         0       70 50 60 50 30 40 20 40    跳转到序号332
序号=412     60 20 70 30 60 50 70         0       90 90 40 20 40 30 50    跳转到序号341
序号=413     40 20 40 30 50 60 50 70         0       90 90 60 20 70 30    跳转到序号341
序号=414     60 20 70 30 90 90         0       60 50 70 40 20 40 30 50    跳转到序号341
序号=415     40 20 40 30 50 90 90         0       60 50 70 60 20 70 30    跳转到序号341
序号=416     90 90 60 50 30 40         0       20 40 70 50 30 70 20 60    跳转到序号344
序号=417     30 70 20 60 60 50 30 40         0       20 40 70 50 90 90    跳转到序号344
序号=418     90 90 20 40 70 50         0       60 50 30 40 30 70 20 60    跳转到序号344
序号=419     30 70 20 60 20 40 70 50         0       60 50 30 40 90 90    跳转到序号344
序号=420     90 90 60 30 70 20         0       60 70 50 50 30 40 20 40    跳转到序号345
序号=421     50 30 40 20 40 60 30 70 20         0       60 70 50 90 90    跳转到序号345
序号=422     90 90 60 70 50         0       60 30 70 20 50 30 40 20 40    跳转到序号345
序号=423     50 30 40 20 40 60 70 50         0       60 30 70 20 90 90    跳转到序号345
序号=424     30 70 60 20 90 90         0       70 40 40 30 50 50 60 20    跳转到序号353
序号=425     60 20 50 50 90 90         0       70 40 40 30 60 20 30 70    跳转到序号353
序号=426     50 50 60 20 90 90         0       70 40 40 30 30 70 60 20    跳转到序号353
序号=427     60 20 30 70 90 90         0       70 40 40 30 60 20 50 50    跳转到序号353
序号=428     30 70 60 20 70 40 40 30         0       90 90 50 50 60 20    跳转到序号353
序号=429     60 20 50 50 70 40 40 30         0       90 90 60 20 30 70    跳转到序号353
序号=430     50 50 60 20 70 40 40 30         0       90 90 30 70 60 20    跳转到序号353
序号=431     60 20 30 70 70 40 40 30         0       90 90 60 20 50 50    跳转到序号353
序号=432     70 60 30 20 90 90         0       20 30 50 40 40 60 70 50    跳转到序号360
序号=433     60 70 50 90 90         0       20 30 50 40 40 70 60 30 20    跳转到序号360
序号=434     70 60 30 20 20 30 50 40 40         0       90 90 60 70 50    跳转到序号360
序号=435     60 70 50 20 30 50 40 40         0       90 90 70 60 30 20    跳转到序号360
序号=436     50 40 40 50 90 90         0       30 20 60 70 70 60 20 30    跳转到序号361
序号=437     70 60 20 30 30 20 60 70         0       90 90 50 40 40 50    跳转到序号361
序号=438     50 70 60 90 90         0       40 40 50 30 20 20 30 60 70    跳转到序号365
序号=439     20 30 60 70 90 90         0       40 40 50 30 20 50 70 60    跳转到序号365
序号=440     50 70 60 40 40 50 30 20         0       90 90 20 30 60 70    跳转到序号365
序号=441     20 30 60 70 40 40 50 30 20         0       90 90 50 70 60    跳转到序号365
序号=442     70 30 20 60 90 90         0       30 40 40 70 50 50 20 60    跳转到序号372
序号=443     20 60 50 50 90 90         0       30 40 40 70 20 60 70 30    跳转到序号372
序号=444     50 50 20 60 90 90         0       30 40 40 70 70 30 20 60    跳转到序号372
序号=445     20 60 70 30 90 90         0       30 40 40 70 20 60 50 50    跳转到序号372
序号=446     70 30 20 60 30 40 40 70         0       90 90 50 50 20 60    跳转到序号372
序号=447     20 60 50 50 30 40 40 70         0       90 90 20 60 70 30    跳转到序号372
序号=448     50 50 20 60 30 40 40 70         0       90 90 70 30 20 60    跳转到序号372
序号=449     20 60 70 30 30 40 40 70         0       90 90 20 60 50 50    跳转到序号372
序号=450     20 70 30 60 40 20 40 30 50         0       90 90 50 70 60    跳转到序号376
序号=451     50 70 60 40 20 40 30 50         0       90 90 20 70 30 60    跳转到序号376
序号=452     20 70 30 60 90 90         0       40 20 40 30 50 50 70 60    跳转到序号376
序号=453     50 70 60 90 90         0       40 20 40 30 50 20 70 30 60    跳转到序号376
序号=454     60 20 70 30 40 30 50 60         0       50 70 40 20 90 90    跳转到序号377
序号=455     90 90 40 30 50 60         0       50 70 40 20 60 20 70 30    跳转到序号377
序号=456     60 20 70 30 50 70 40 20         0       40 30 50 60 90 90    跳转到序号377
序号=457     90 90 50 70 40 20         0       40 30 50 60 60 20 70 30    跳转到序号377
序号=458     50 40 40 50 90 90         1       70 60 20 30 30 20 60 70    跳转到序号380
序号=459     30 20 60 70 70 60 20 30         1       90 90 50 40 40 50    跳转到序号380
序号=460     50 70 60 90 90         1       40 40 50 30 20 20 30 60 70    跳转到序号381
序号=461     20 30 60 70 90 90         1       40 40 50 30 20 50 70 60    跳转到序号381
序号=462     50 70 60 40 40 50 30 20         1       90 90 20 30 60 70    跳转到序号381
序号=463     20 30 60 70 40 40 50 30 20         1       90 90 50 70 60    跳转到序号381
序号=464     70 30 20 60 90 90         1       30 40 40 70 50 50 20 60    跳转到序号388
序号=465     20 60 50 50 90 90         1       30 40 40 70 20 60 70 30    跳转到序号388
序号=466     50 50 20 60 90 90         1       30 40 40 70 70 30 20 60    跳转到序号388
序号=467     20 60 70 30 90 90         1       30 40 40 70 20 60 50 50    跳转到序号388
序号=468     70 30 20 60 30 40 40 70         1       90 90 50 50 20 60    跳转到序号388
序号=469     20 60 50 50 30 40 40 70         1       90 90 20 60 70 30    跳转到序号388
序号=470     50 50 20 60 30 40 40 70         1       90 90 70 30 20 60    跳转到序号388
序号=471     20 60 70 30 30 40 40 70         1       90 90 20 60 50 50    跳转到序号388
序号=472     30 70 60 20 90 90         1       70 40 40 30 50 50 60 20    跳转到序号393
序号=473     60 20 50 50 90 90         1       70 40 40 30 60 20 30 70    跳转到序号393
序号=474     50 50 60 20 90 90         1       70 40 40 30 30 70 60 20    跳转到序号393
序号=475     60 20 30 70 90 90         1       70 40 40 30 60 20 50 50    跳转到序号393
序号=476     30 70 60 20 70 40 40 30         1       90 90 50 50 60 20    跳转到序号393
序号=477     60 20 50 50 70 40 40 30         1       90 90 60 20 30 70    跳转到序号393
序号=478     50 50 60 20 70 40 40 30         1       90 90 30 70 60 20    跳转到序号393
序号=479     60 20 30 70 70 40 40 30         1       90 90 60 20 50 50    跳转到序号393
序号=480     70 60 30 20 90 90         1       20 30 50 40 40 60 70 50    跳转到序号400
序号=481     60 70 50 90 90         1       20 30 50 40 40 70 60 30 20    跳转到序号400
序号=482     70 60 30 20 20 30 50 40 40         1       90 90 60 70 50    跳转到序号400
序号=483     60 70 50 20 30 50 40 40         1       90 90 70 60 30 20    跳转到序号400
序号=484     90 90 60 50 30 40         1       20 40 70 50 30 70 20 60    跳转到序号408
序号=485     30 70 20 60 60 50 30 40         1       20 40 70 50 90 90    跳转到序号408
序号=486     90 90 20 40 70 50         1       60 50 30 40 30 70 20 60    跳转到序号408
序号=487     30 70 20 60 20 40 70 50         1       60 50 30 40 90 90    跳转到序号408
序号=488     90 90 60 30 70 20         1       60 70 50 50 30 40 20 40    跳转到序号409
序号=489     50 30 40 20 40 60 30 70 20         1       60 70 50 90 90    跳转到序号409
序号=490     90 90 60 70 50         1       60 30 70 20 50 30 40 20 40    跳转到序号409
序号=491     50 30 40 20 40 60 70 50         1       60 30 70 20 90 90    跳转到序号409
序号=492     90 90 50 70 60         1       20 70 30 60 40 20 40 30 50    跳转到序号412
序号=493     40 20 40 30 50 50 70 60         1       20 70 30 60 90 90    跳转到序号412
序号=494     90 90 20 70 30 60         1       50 70 60 40 20 40 30 50    跳转到序号412
序号=495     40 20 40 30 50 20 70 30 60         1       50 70 60 90 90    跳转到序号412
序号=496     90 90 50 70 40 20         1       40 30 50 60 60 20 70 30    跳转到序号413
序号=497     60 20 70 30 50 70 40 20         1       40 30 50 60 90 90    跳转到序号413
序号=498     90 90 40 30 50 60         1       50 70 40 20 60 20 70 30    跳转到序号413
序号=499     60 20 70 30 40 30 50 60         1       50 70 40 20 90 90    跳转到序号413
序号=500     60 70 50 70 20 90         1       90 60 30 50 30 40 20 40    跳转到序号420
序号=501     50 30 40 20 40 70 20 90         1       90 60 30 60 70 50    跳转到序号420
序号=502     60 70 50 90 60 30         1       70 20 90 50 30 40 20 40    跳转到序号420
序号=503     50 30 40 20 40 90 60 30         1       70 20 90 60 70 50    跳转到序号420
序号=504     40 30 60 20 30 90 90         1       60 20 50 50 70 70 40    跳转到序号425
序号=505     70 70 40 90 90         1       60 20 50 50 40 30 60 20 30    跳转到序号425
序号=506     40 30 60 20 30 60 20 50 50         1       90 90 70 70 40    跳转到序号425
序号=507     70 70 40 60 20 50 50         1       90 90 40 30 60 20 30    跳转到序号425
序号=508     30 20 60 70 90 50 40         1       40 50 90 70 60 20 30    跳转到序号436
序号=509     70 60 20 30 90 50 40         1       40 50 90 30 20 60 70    跳转到序号436
序号=510     30 20 60 70 40 50 90         1       90 50 40 70 60 20 30    跳转到序号436
序号=511     70 60 20 30 40 50 90         1       90 50 40 30 20 60 70    跳转到序号436
序号=512     40 70 70 90 90         1       50 50 20 60 30 20 60 30 40    跳转到序号444
序号=513     30 20 60 30 40 90 90         1       50 50 20 60 40 70 70    跳转到序号444
序号=514     40 70 70 50 50 20 60         1       90 90 30 20 60 30 40    跳转到序号444
序号=515     30 20 60 30 40 50 50 20 60         1       90 90 40 70 70    跳转到序号444
序号=516     90 20 70 40 20 40 30 50         1       50 70 60 30 60 90    跳转到序号451
序号=517     30 60 90 40 20 40 30 50         1       50 70 60 90 20 70    跳转到序号451
序号=518     90 20 70 50 70 60         1       40 20 40 30 50 30 60 90    跳转到序号451
序号=519     30 60 90 50 70 60         1       40 20 40 30 50 90 20 70    跳转到序号451
序号=520     70 60 20 30 90 50 40         0       40 50 90 30 20 60 70    跳转到序号458
序号=521     30 20 60 70 90 50 40         0       40 50 90 70 60 20 30    跳转到序号458
序号=522     70 60 20 30 40 50 90         0       90 50 40 30 20 60 70    跳转到序号458
序号=523     30 20 60 70 40 50 90         0       90 50 40 70 60 20 30    跳转到序号458
序号=524     40 70 70 90 90         0       50 50 20 60 30 20 60 30 40    跳转到序号466
序号=525     30 20 60 30 40 90 90         0       50 50 20 60 40 70 70    跳转到序号466
序号=526     40 70 70 50 50 20 60         0       90 90 30 20 60 30 40    跳转到序号466
序号=527     30 20 60 30 40 50 50 20 60         0       90 90 40 70 70    跳转到序号466
序号=528     40 30 60 20 30 90 90         0       60 20 50 50 70 70 40    跳转到序号473
序号=529     70 70 40 90 90         0       60 20 50 50 40 30 60 20 30    跳转到序号473
序号=530     40 30 60 20 30 60 20 50 50         0       90 90 70 70 40    跳转到序号473
序号=531     70 70 40 60 20 50 50         0       90 90 40 30 60 20 30    跳转到序号473
序号=532     60 70 50 70 20 90         0       90 60 30 50 30 40 20 40    跳转到序号488
序号=533     50 30 40 20 40 70 20 90         0       90 60 30 60 70 50    跳转到序号488
序号=534     60 70 50 90 60 30         0       70 20 90 50 30 40 20 40    跳转到序号488
序号=535     50 30 40 20 40 90 60 30         0       70 20 90 60 70 50    跳转到序号488
序号=536     30 60 90 50 70 60         0       40 20 40 30 50 90 20 70    跳转到序号493
序号=537     90 20 70 50 70 60         0       40 20 40 30 50 30 60 90    跳转到序号493
序号=538     30 60 90 40 20 40 30 50         0       50 70 60 90 20 70    跳转到序号493
序号=539     90 20 70 40 20 40 30 50         0       50 70 60 30 60 90    跳转到序号493
序号=540     50 40 30 60 90 90         0       70 70 40 20 30 60 20 50    跳转到序号505
序号=541     20 30 60 20 50 90 90         0       70 70 40 50 40 30 60    跳转到序号505
序号=542     50 40 30 60 70 70 40         0       90 90 20 30 60 20 50    跳转到序号505
序号=543     20 30 60 20 50 70 70 40         0       90 90 50 40 30 60    跳转到序号505
序号=544     50 20 60 30 20 90 90         0       40 70 70 60 30 40 50    跳转到序号512
序号=545     60 30 40 50 90 90         0       40 70 70 50 20 60 30 20    跳转到序号512
序号=546     50 20 60 30 20 40 70 70         0       90 90 60 30 40 50    跳转到序号512
序号=547     60 30 40 50 40 70 70         0       90 90 50 20 60 30 20    跳转到序号512
序号=548     50 20 60 30 20 90 90         1       40 70 70 60 30 40 50    跳转到序号524
序号=549     60 30 40 50 90 90         1       40 70 70 50 20 60 30 20    跳转到序号524
序号=550     50 20 60 30 20 40 70 70         1       90 90 60 30 40 50    跳转到序号524
序号=551     60 30 40 50 40 70 70         1       90 90 50 20 60 30 20    跳转到序号524
序号=552     50 40 30 60 90 90         1       70 70 40 20 30 60 20 50    跳转到序号529
序号=553     20 30 60 20 50 90 90         1       70 70 40 50 40 30 60    跳转到序号529
序号=554     50 40 30 60 70 70 40         1       90 90 20 30 60 20 50    跳转到序号529
序号=555     20 30 60 20 50 70 70 40         1       90 90 50 40 30 60    跳转到序号529
序号=556     70 70 40 90 50 40         1       30 60 90 20 30 60 20 50    跳转到序号540
序号=557     20 30 60 20 50 90 50 40         1       30 60 90 70 70 40    跳转到序号540
序号=558     70 70 40 30 60 90         1       90 50 40 20 30 60 20 50    跳转到序号540
序号=559     20 30 60 20 50 30 60 90         1       90 50 40 70 70 40    跳转到序号540
序号=560     40 70 70 90 60 30         1       40 50 90 50 20 60 30 20    跳转到序号545
序号=561     50 20 60 30 20 90 60 30         1       40 50 90 40 70 70    跳转到序号545
序号=562     40 70 70 40 50 90         1       90 60 30 50 20 60 30 20    跳转到序号545
序号=563     50 20 60 30 20 40 50 90         1       90 60 30 40 70 70    跳转到序号545
序号=564     40 70 70 90 60 30         0       40 50 90 50 20 60 30 20    跳转到序号549
序号=565     50 20 60 30 20 90 60 30         0       40 50 90 40 70 70    跳转到序号549
序号=566     40 70 70 40 50 90         0       90 60 30 50 20 60 30 20    跳转到序号549
序号=567     50 20 60 30 20 40 50 90         0       90 60 30 40 70 70    跳转到序号549
序号=568     70 70 40 90 50 40         0       30 60 90 20 30 60 20 50    跳转到序号552
序号=569     20 30 60 20 50 90 50 40         0       30 60 90 70 70 40    跳转到序号552
序号=570     70 70 40 30 60 90         0       90 50 40 20 30 60 20 50    跳转到序号552
序号=571     20 30 60 20 50 30 60 90         0       90 50 40 70 70 40    跳转到序号552
序号=572     30 60 90 40 70 70         0       40 90 50 20 30 60 20 50    跳转到序号556
序号=573     20 30 60 20 50 40 70 70         0       40 90 50 30 60 90    跳转到序号556
序号=574     30 60 90 40 90 50         0       40 70 70 20 30 60 20 50    跳转到序号556
序号=575     20 30 60 20 50 40 90 50         0       40 70 70 30 60 90    跳转到序号556
序号=576     50 90 40 90 60 30         0       50 20 60 30 20 70 70 40    跳转到序号561
序号=577     70 70 40 90 60 30         0       50 20 60 30 20 50 90 40    跳转到序号561
序号=578     50 90 40 50 20 60 30 20         0       90 60 30 70 70 40    跳转到序号561
序号=579     70 70 40 50 20 60 30 20         0       90 60 30 50 90 40    跳转到序号561
序号=580     50 90 40 90 60 30         1       50 20 60 30 20 70 70 40    跳转到序号565
序号=581     70 70 40 90 60 30         1       50 20 60 30 20 50 90 40    跳转到序号565
序号=582     50 90 40 50 20 60 30 20         1       90 60 30 70 70 40    跳转到序号565
序号=583     70 70 40 50 20 60 30 20         1       90 60 30 50 90 40    跳转到序号565
序号=584     30 60 90 40 70 70         1       40 90 50 20 30 60 20 50    跳转到序号568
序号=585     20 30 60 20 50 40 70 70         1       40 90 50 30 60 90    跳转到序号568
序号=586     30 60 90 40 90 50         1       40 70 70 20 30 60 20 50    跳转到序号568
序号=587     20 30 60 20 50 40 90 50         1       40 70 70 30 60 90    跳转到序号568
序号=588     50 20 30 60 20 40 70 70         1       30 60 90 50 40 90    跳转到序号572
序号=589     50 40 90 40 70 70         1       30 60 90 50 20 30 60 20    跳转到序号572
序号=590     50 20 30 60 20 30 60 90         1       40 70 70 50 40 90    跳转到序号572
序号=591     50 40 90 30 60 90         1       40 70 70 50 20 30 60 20    跳转到序号572
序号=592     40 90 50 70 20 30 60         1       20 50 40 70 30 60 90    跳转到序号573
序号=593     30 60 90 70 20 30 60         1       20 50 40 70 40 90 50    跳转到序号573
序号=594     40 90 50 20 50 40 70         1       70 20 30 60 30 60 90    跳转到序号573
序号=595     30 60 90 20 50 40 70         1       70 20 30 60 40 90 50    跳转到序号573
序号=596     60 30 20 70 90 60 30         1       50 90 40 70 40 50 20    跳转到序号576
序号=597     70 40 50 20 90 60 30         1       50 90 40 60 30 20 70    跳转到序号576
序号=598     60 30 20 70 50 90 40         1       90 60 30 70 40 50 20    跳转到序号576
序号=599     70 40 50 20 50 90 40         1       90 60 30 60 30 20 70    跳转到序号576
序号=600     20 60 30 20 50 90 60 30         1       70 70 40 90 40 50    跳转到序号577
序号=601     90 40 50 90 60 30         1       70 70 40 20 60 30 20 50    跳转到序号577
序号=602     20 60 30 20 50 70 70 40         1       90 60 30 90 40 50    跳转到序号577
序号=603     90 40 50 70 70 40         1       90 60 30 20 60 30 20 50    跳转到序号577
序号=604     60 30 20 70 90 60 30         0       50 90 40 70 40 50 20    跳转到序号580
序号=605     70 40 50 20 90 60 30         0       50 90 40 60 30 20 70    跳转到序号580
序号=606     60 30 20 70 50 90 40         0       90 60 30 70 40 50 20    跳转到序号580
序号=607     70 40 50 20 50 90 40         0       90 60 30 60 30 20 70    跳转到序号580
序号=608     20 60 30 20 50 90 60 30         0       70 70 40 90 40 50    跳转到序号581
序号=609     90 40 50 90 60 30         0       70 70 40 20 60 30 20 50    跳转到序号581
序号=610     20 60 30 20 50 70 70 40         0       90 60 30 90 40 50    跳转到序号581
序号=611     90 40 50 70 70 40         0       90 60 30 20 60 30 20 50    跳转到序号581
序号=612     50 20 30 60 20 40 70 70         0       30 60 90 50 40 90    跳转到序号584
序号=613     50 40 90 40 70 70         0       30 60 90 50 20 30 60 20    跳转到序号584
序号=614     50 20 30 60 20 30 60 90         0       40 70 70 50 40 90    跳转到序号584
序号=615     50 40 90 30 60 90         0       40 70 70 50 20 30 60 20    跳转到序号584
序号=616     40 90 50 70 20 30 60         0       20 50 40 70 30 60 90    跳转到序号585
序号=617     30 60 90 70 20 30 60         0       20 50 40 70 40 90 50    跳转到序号585
序号=618     40 90 50 20 50 40 70         0       70 20 30 60 30 60 90    跳转到序号585
序号=619     30 60 90 20 50 40 70         0       70 20 30 60 40 90 50    跳转到序号585
序号=620     90 50 40 40 70 70         0       50 20 30 60 20 90 30 60    跳转到序号588
序号=621     90 30 60 40 70 70         0       50 20 30 60 20 90 50 40    跳转到序号588
序号=622     90 50 40 50 20 30 60 20         0       40 70 70 90 30 60    跳转到序号588
序号=623     90 30 60 50 20 30 60 20         0       40 70 70 90 50 40    跳转到序号588
序号=624     20 50 40 70 30 60 30 60         0       90 70 20 40 90 50    跳转到序号593
序号=625     40 90 50 30 60 30 60         0       90 70 20 20 50 40 70    跳转到序号593
序号=626     20 50 40 70 90 70 20         0       30 60 30 60 40 90 50    跳转到序号593
序号=627     40 90 50 90 70 20         0       30 60 30 60 20 50 40 70    跳转到序号593
序号=628     50 90 40 60 30 60 30         0       20 70 90 70 40 50 20    跳转到序号596
序号=629     70 40 50 20 60 30 60 30         0       20 70 90 50 90 40    跳转到序号596
序号=630     50 90 40 20 70 90         0       60 30 60 30 70 40 50 20    跳转到序号596
序号=631     70 40 50 20 20 70 90         0       60 30 60 30 50 90 40    跳转到序号596
序号=632     70 70 40 60 30 90         0       40 50 90 20 60 30 20 50    跳转到序号601
序号=633     20 60 30 20 50 60 30 90         0       40 50 90 70 70 40    跳转到序号601
序号=634     70 70 40 40 50 90         0       60 30 90 20 60 30 20 50    跳转到序号601
序号=635     20 60 30 20 50 40 50 90         0       60 30 90 70 70 40    跳转到序号601
序号=636     50 90 40 60 30 60 30         1       20 70 90 70 40 50 20    跳转到序号604
序号=637     70 40 50 20 60 30 60 30         1       20 70 90 50 90 40    跳转到序号604
序号=638     50 90 40 20 70 90         1       60 30 60 30 70 40 50 20    跳转到序号604
序号=639     70 40 50 20 20 70 90         1       60 30 60 30 50 90 40    跳转到序号604
序号=640     70 70 40 60 30 90         1       40 50 90 20 60 30 20 50    跳转到序号609
序号=641     20 60 30 20 50 60 30 90         1       40 50 90 70 70 40    跳转到序号609
序号=642     70 70 40 40 50 90         1       60 30 90 20 60 30 20 50    跳转到序号609
序号=643     20 60 30 20 50 40 50 90         1       60 30 90 70 70 40    跳转到序号609
序号=644     90 50 40 40 70 70         1       50 20 30 60 20 90 30 60    跳转到序号612
序号=645     90 30 60 40 70 70         1       50 20 30 60 20 90 50 40    跳转到序号612
序号=646     90 50 40 50 20 30 60 20         1       40 70 70 90 30 60    跳转到序号612
序号=647     90 30 60 50 20 30 60 20         1       40 70 70 90 50 40    跳转到序号612
序号=648     20 50 40 70 30 60 30 60         1       90 70 20 40 90 50    跳转到序号617
序号=649     40 90 50 30 60 30 60         1       90 70 20 20 50 40 70    跳转到序号617
序号=650     20 50 40 70 90 70 20         1       30 60 30 60 40 90 50    跳转到序号617
序号=651     40 90 50 90 70 20         1       30 60 30 60 20 50 40 70    跳转到序号617

启发式策略(单节点)(V2)


//通用的数据缓存去重编号方案
template<typename T>
class GetSingleId
{
public:
	int id(T x) //所有元素按照首次传入顺序编号0,1,2......
	{
		auto it = m.find(x);
		if (it != m.end())return it->second;
		mr[n] = x;
		return m[x] = n++;
	}
	int num() //id()==num()-1表示是新元素,否则是重复元素
	{
		return n;
	}
	T getData(int id) //根据id获取元素数据
	{
		return mr[id];
	}
private:
	map<T, int>m;
	map<int, T>mr;
	int n = 0;
};

struct Node {
	vector<int>up{ 70,60,50,40,30,20,90 };
	int mid = 0;
	vector<int>down{ 50,60,70,90,20,30,40 };
	int ans = 0;
	int id = 0;
	int fa = 0;
};

int getId(vector<int> v) {
	static map< vector<int>, int>m;
	if (m.find(v) != m.end())return m[v];
	int ans = m.size();
	int len = v.size();
	while (len--) {
		v.push_back(v[0]);
		v.erase(v.begin());
		m[v] = ans;
	}
	return ans;
}
int getId(const Node& nod)
{
	static GetSingleId<vector<int>> opt;
	int id1 = getId(nod.up);
	int id2 = getId(nod.down);
	return opt.id(vector<int>{id1, nod.mid, id2});
}

vector<int> findId(const vector<int>& v)
{
	vector<int>ans;
	for (int i = 0; i < v.size(); i++) {
		int s = 0;
		for (int j = i; j < i + v.size(); j++) {
			s += v[j % v.size()];
			if (s >= 180)break;
		}
		if (s == 180)ans.push_back(i);
	}
	return ans;
}

vector<Node> getNext(const Node& nod)
{
	vector<int> id1 = findId(nod.up);
	vector<int> id2 = findId(nod.down);
	vector<Node> ans;
	for (int i : id1) {
		for (int j : id2) {
			vector<int>v1, v2;
			int k1 = i, k2 = j, s1 = 0, s2 = 0;
			while (s1 < 180) {
				v1.push_back(nod.down[k2]);
				s1 += nod.down[k2];
				k2 = (k2 + 1) % nod.down.size();
			}
			while (s2 < 180) {
				v2.push_back(nod.up[k1]);
				s2 += nod.up[k1];
				k1 = (k1 + 1) % nod.up.size();
			}
			while (k1 != i) {
				v1.push_back(nod.up[k1]);
				k1 = (k1 + 1) % nod.up.size();
			}
			while (k2 != j) {
				v2.push_back(nod.down[k2]);
				k2 = (k2 + 1) % nod.down.size();
			}
			ans.push_back({ v1,1 - nod.mid,v2,nod.ans + 1,0,0 });
		}
	}
	return ans;
}

//假设对半翻转操作是长度为1,另外2个操作是长度为0,对整个图进行bfs搜出单源最短路径
vector<int> bfs(vector<Node>&vn)
{
	vector<int> ans(652);
	Node nod;
	set<int>s;
	s.insert(getId(nod));
	queue<Node>q;
	q.push(nod);
	while (!q.empty()) {
		auto nod = q.front();
		int fa = nod.id;
		int newAns = nod.ans + 1;
		ans[fa] = nod.fa;
		vn.push_back(nod);
		q.pop();
		auto v = getNext(nod);
		for (auto nod : v) {
			int id = getId(nod);
			if (s.find(id) == s.end()) {
				s.insert(id);
				nod.id = id;
				nod.fa = fa;
				nod.ans = newAns;
				q.push(nod);
			}
		}
	}
	return ans;
}

bool check56(const vector<int>& v)
{
	int s50 = 0, s60 = 0;
	for (auto x : v) {
		if (x == 50)s50++;
		if (x == 60)s60++;
	}
	if (s50 != s60)return false;
	for (int i = 0; i < v.size(); i++) {
		if (v[i] != 50 && v[i] != 60)continue;
		if (v[(i + 1) % v.size()] != 110 - v[i] && v[(i + v.size() - 1) % v.size()] != 110 - v[i])return false;
	}
	return true;
}
bool check56(const Node& nod)
{
	return check56(nod.up) && check56(nod.down);
}

int getLen(vector<Node>& vn, vector<int>& fa, int id)
{
	int s = 0;
	while (!check56(vn[id])) {
		s++;
		id = fa[id];
	}
	return s;
}

int main() {
	vector<Node> vn;
	vector<int> fa = bfs(vn);
	for (int i = 0; i < fa.size(); i++) {
		cout << i << " " << fa[i] << endl;
	}
	int max1 = 0, max2 = 0, maxs = 0;
	for (int i = 0; i < fa.size(); i++) {
		int x = getLen(vn, fa, i);
		max1 = max(max1, x);
		max2 = max(max2, vn[i].ans - x);
		maxs = max(maxs, vn[i].ans);
	}
	cout << endl << "max:" << max1 << " " << max2 << " " << maxs;
	return 0;
}

输出:

。。。。。。

643 609
644 612
645 612
646 612
647 612
648 617
649 617
650 617
651 617

max:10 6 13

所有状态的最速复原都可以分为2步,第一步是完成2组50+60的合并,第二步是彻底复原。其中的第一步,最多需要10次大操作,其中的第二步,最多需要6次大操作,而总共最多需要13次大操作。

启发式策略(双节点)(V2)



//通用的数据缓存去重编号方案
template<typename T>
class GetSingleId
{
public:
	int id(T x) //所有元素按照首次传入顺序编号0,1,2......
	{
		auto it = m.find(x);
		if (it != m.end())return it->second;
		mr[n] = x;
		return m[x] = n++;
	}
	int num() //id()==num()-1表示是新元素,否则是重复元素
	{
		return n;
	}
	T getData(int id) //根据id获取元素数据
	{
		return mr[id];
	}
private:
	map<T, int>m;
	map<int, T>mr;
	int n = 0;
};

struct Node {
	vector<int>up{ 70,60,50,40,30,20,90 };
	int mid = 0;
	vector<int>down{ 50,60,70,90,20,30,40 };
	int ans = 0;
	int id = 0;
	int fa = 0;
};

int getId(vector<int> v) {
	static map< vector<int>, int>m;
	if (m.find(v) != m.end())return m[v];
	int ans = m.size();
	int len = v.size();
	while (len--) {
		v.push_back(v[0]);
		v.erase(v.begin());
		m[v] = ans;
	}
	return ans;
}
int getId(const Node& nod)
{
	static GetSingleId<vector<int>> opt;
	int id1 = getId(nod.up);
	int id2 = getId(nod.down);
	return opt.id(vector<int>{id1, nod.mid, id2});
}

vector<int> findId(const vector<int>& v)
{
	vector<int>ans;
	for (int i = 0; i < v.size(); i++) {
		int s = 0;
		for (int j = i; j < i + v.size(); j++) {
			s += v[j % v.size()];
			if (s >= 180)break;
		}
		if (s == 180)ans.push_back(i);
	}
	return ans;
}

vector<Node> getNext(const Node& nod)
{
	vector<int> id1 = findId(nod.up);
	vector<int> id2 = findId(nod.down);
	vector<Node> ans;
	for (int i : id1) {
		for (int j : id2) {
			vector<int>v1, v2;
			int k1 = i, k2 = j, s1 = 0, s2 = 0;
			while (s1 < 180) {
				v1.push_back(nod.down[k2]);
				s1 += nod.down[k2];
				k2 = (k2 + 1) % nod.down.size();
			}
			while (s2 < 180) {
				v2.push_back(nod.up[k1]);
				s2 += nod.up[k1];
				k1 = (k1 + 1) % nod.up.size();
			}
			while (k1 != i) {
				v1.push_back(nod.up[k1]);
				k1 = (k1 + 1) % nod.up.size();
			}
			while (k2 != j) {
				v2.push_back(nod.down[k2]);
				k2 = (k2 + 1) % nod.down.size();
			}
			ans.push_back({ v1,1 - nod.mid,v2,nod.ans + 1,0,0 });
		}
	}
	return ans;
}

//假设对半翻转操作是长度为1,另外2个操作是长度为0,对整个图进行bfs搜出单源最短路径
vector<int> bfs(vector<Node>&vn)
{
	vector<int> ans(652);
	Node nod;
	set<int>s;
	s.insert(getId(nod));
	queue<Node>q;
	q.push(nod);
	while (!q.empty()) {
		auto nod = q.front();
		int fa = nod.id;
		int newAns = nod.ans + 1;
		ans[fa] = nod.fa;
		vn.push_back(nod);
		q.pop();
		auto v = getNext(nod);
		for (auto nod : v) {
			int id = getId(nod);
			if (s.find(id) == s.end()) {
				s.insert(id);
				nod.id = id;
				nod.fa = fa;
				nod.ans = newAns;
				q.push(nod);
			}
		}
	}
	return ans;
}

bool check5656(const vector<int>& v)
{
	int s50 = 0, s60 = 0;
	for (auto x : v) {
		if (x == 50)s50++;
		if (x == 60)s60++;
	}
	if (s50 != s60)return false;
	for (int i = 0; i < v.size(); i++) {
		if (v[i] != 50 && v[i] != 60)continue;
		if (v[(i + 1) % v.size()] != 110 - v[i] && v[(i + v.size() - 1) % v.size()] != 110 - v[i])return false;
	}
	return true;
}
bool check5656(const Node& nod)
{
	return check5656(nod.up) && check5656(nod.down);
}
bool check56(const vector<int>& v)
{
	for (int i = 0; i < v.size(); i++) {
		if (v[i] != 50 && v[i] != 60)continue;
		if (v[(i + 1) % v.size()] == 110 - v[i])return true;
	}
	return false;
}
bool check56(const Node& nod)
{
	return check56(nod.up) || check56(nod.down);
}

void getLen(vector<Node>& vn, vector<int>& fa, int id, int &len1, int &len2)
{
	int id0 = id;
	len1 = 0, len2 = 0;
	while (!check56(vn[id])) {
		len1++;
		id = fa[id];
	}
	while (!check5656(vn[id])) {
		len2++;
		id = fa[id];
	}
	cout << id0 << " " << len1 << " " << len2 << " " << vn[id0].ans - len1 - len2 << endl;
}

int main() {
	vector<Node> vn;
	vector<int> fa = bfs(vn);
	for (int i = 0; i < fa.size(); i++) {
		cout << i << " " << fa[i] << endl;
	}
	int max1 = 0, max2 = 0, max3 = 0, maxs = 0;
	for (int i = 0; i < fa.size(); i++) {
		int len1, len2;
		getLen(vn, fa, i, len1, len2);
		max1 = max(max1, len1);
		max2 = max(max2, len2);
		max3 = max(max3, vn[i].ans - len1 - len2);
		maxs = max(maxs, vn[i].ans);
	}
	cout << endl << "max:" << max1 << " " << max2 << " " << max3 << " " << maxs;
	return 0;
}

输出:

。。。。。。

644 0 10 3
645 7 3 3
646 7 3 3
647 0 10 3
648 7 3 3
649 7 3 3
650 7 3 3
651 7 3 3

max:7 10 6 13

其中,只有8种情况是中间为10的

直接挑出来:

序号=620     90 50 40 40 70 70         0       50 20 30 60 20 90 30 60    跳转到序号588
序号=623     90 30 60 50 20 30 60 20         0       40 70 70 90 50 40    跳转到序号588
序号=633     20 60 30 20 50 60 30 90         0       40 50 90 70 70 40    跳转到序号601
序号=634     70 70 40 40 50 90         0       60 30 90 20 60 30 20 50    跳转到序号601
序号=641     20 60 30 20 50 60 30 90         1       40 50 90 70 70 40    跳转到序号609
序号=642     70 70 40 40 50 90         1       60 30 90 20 60 30 20 50    跳转到序号609
序号=644     90 50 40 40 70 70         1       50 20 30 60 20 90 30 60    跳转到序号612
序号=647     90 30 60 50 20 30 60 20         1       40 70 70 90 50 40    跳转到序号612

显然,这8种情况只需要合适去重之后就会变成一种情况,但是我们不需要再去重了。

根据这8种情况,提取新的特征:70 70 90挨着了。

启发式策略(三节点)(最终策略)


//通用的数据缓存去重编号方案
template<typename T>
class GetSingleId
{
public:
	int id(T x) //所有元素按照首次传入顺序编号0,1,2......
	{
		auto it = m.find(x);
		if (it != m.end())return it->second;
		mr[n] = x;
		return m[x] = n++;
	}
	int num() //id()==num()-1表示是新元素,否则是重复元素
	{
		return n;
	}
	T getData(int id) //根据id获取元素数据
	{
		return mr[id];
	}
private:
	map<T, int>m;
	map<int, T>mr;
	int n = 0;
};

struct Node {
	vector<int>up{ 70,60,50,40,30,20,90 };
	int mid = 0;
	vector<int>down{ 50,60,70,90,20,30,40 };
	int ans = 0;
	int id = 0;
	int fa = 0;
};

int getId(vector<int> v) {
	static map< vector<int>, int>m;
	if (m.find(v) != m.end())return m[v];
	int ans = m.size();
	int len = v.size();
	while (len--) {
		v.push_back(v[0]);
		v.erase(v.begin());
		m[v] = ans;
	}
	return ans;
}
int getId(const Node& nod)
{
	static GetSingleId<vector<int>> opt;
	int id1 = getId(nod.up);
	int id2 = getId(nod.down);
	return opt.id(vector<int>{id1, nod.mid, id2});
}

vector<int> findId(const vector<int>& v)
{
	vector<int>ans;
	for (int i = 0; i < v.size(); i++) {
		int s = 0;
		for (int j = i; j < i + v.size(); j++) {
			s += v[j % v.size()];
			if (s >= 180)break;
		}
		if (s == 180)ans.push_back(i);
	}
	return ans;
}

vector<Node> getNext(const Node& nod)
{
	vector<int> id1 = findId(nod.up);
	vector<int> id2 = findId(nod.down);
	vector<Node> ans;
	for (int i : id1) {
		for (int j : id2) {
			vector<int>v1, v2;
			int k1 = i, k2 = j, s1 = 0, s2 = 0;
			while (s1 < 180) {
				v1.push_back(nod.down[k2]);
				s1 += nod.down[k2];
				k2 = (k2 + 1) % nod.down.size();
			}
			while (s2 < 180) {
				v2.push_back(nod.up[k1]);
				s2 += nod.up[k1];
				k1 = (k1 + 1) % nod.up.size();
			}
			while (k1 != i) {
				v1.push_back(nod.up[k1]);
				k1 = (k1 + 1) % nod.up.size();
			}
			while (k2 != j) {
				v2.push_back(nod.down[k2]);
				k2 = (k2 + 1) % nod.down.size();
			}
			ans.push_back({ v1,1 - nod.mid,v2,nod.ans + 1,0,0 });
		}
	}
	return ans;
}

//假设对半翻转操作是长度为1,另外2个操作是长度为0,对整个图进行bfs搜出单源最短路径
vector<int> bfs(vector<Node>&vn)
{
	vector<int> ans(652);
	Node nod;
	set<int>s;
	s.insert(getId(nod));
	queue<Node>q;
	q.push(nod);
	while (!q.empty()) {
		auto nod = q.front();
		int fa = nod.id;
		int newAns = nod.ans + 1;
		ans[fa] = nod.fa;
		vn.push_back(nod);
		q.pop();
		auto v = getNext(nod);
		for (auto nod : v) {
			int id = getId(nod);
			if (s.find(id) == s.end()) {
				s.insert(id);
				nod.id = id;
				nod.fa = fa;
				nod.ans = newAns;
				q.push(nod);
			}
		}
	}
	return ans;
}

bool check5656(const vector<int>& v)
{
	int s50 = 0, s60 = 0;
	for (auto x : v) {
		if (x == 50)s50++;
		if (x == 60)s60++;
	}
	if (s50 != s60)return false;
	for (int i = 0; i < v.size(); i++) {
		if (v[i] != 50 && v[i] != 60)continue;
		if (v[(i + 1) % v.size()] != 110 - v[i] && v[(i + v.size() - 1) % v.size()] != 110 - v[i])return false;
	}
	return true;
}
bool check5656(const Node& nod)
{
	return check5656(nod.up) && check5656(nod.down);
}
bool check56(const vector<int>& v)
{
	for (int i = 0; i < v.size(); i++) {
		if (v[i] != 50 && v[i] != 60)continue;
		if (v[(i + 1) % v.size()] == 110 - v[i])return true;
	}
	return false;
}
bool check56(const Node& nod)
{
	return check56(nod.up) || check56(nod.down);
}
bool check779(const vector<int>& v)
{
	for (int i = 0; i < v.size(); i++) {
		if (v[i] != 90)continue;
		if (v[(i + 1) % v.size()] == 70 && v[(i + 2) % v.size()] == 70)return false;
		if (v[(i + v.size() - 1) % v.size()] == 70 && v[(i + v.size() - 2) % v.size()] == 70)return false;
	}
	return true;
}
bool check779(const Node& nod)
{
	return check779(nod.up) && check779(nod.down);
}

void getLen(vector<Node>& vn, vector<int>& fa, int id, int &len1, int &len2, int &len3)
{
	int id0 = id;
	len1 = 0, len2 = 0, len3 = 0;
	while (!check779(vn[id])) {
		len1++;
		id = fa[id];
	}
	while (!check56(vn[id])) {
		len2++;
		id = fa[id];
	}
	while (!check5656(vn[id])) {
		len3++;
		id = fa[id];
	}
	cout << id0 << " " << len1 << " " << len2 << " " <<len3<<" "<< vn[id0].ans - len1 - len2 -len3<< endl;
}

int main() {
	vector<Node> vn;
	vector<int> fa = bfs(vn);
	for (int i = 0; i < fa.size(); i++) {
		cout << i << " " << fa[i] << endl;
	}
	int max1 = 0, max2 = 0, max3 = 0, max4=0, maxs = 0;
	for (int i = 0; i < fa.size(); i++) {
		int len1, len2, len3;
		getLen(vn, fa, i, len1, len2,len3);
		max1 = max(max1, len1);
		max2 = max(max2, len2);
		max3 = max(max3, len3);
		max4 = max(max4, vn[i].ans - len1 - len2-len3);
		maxs = max(maxs, vn[i].ans);
	}
	cout << endl << "max:" << max1 << " " << max2 << " " << max3 << " " << max4 <<" "<< maxs;
	return 0;
}

输出:

。。。。。。

640 1 6 3 3
641 1 6 3 3
642 1 6 3 3
643 1 6 3 3
644 1 6 3 3
645 1 6 3 3
646 1 6 3 3
647 1 6 3 3
648 0 7 3 3
649 0 7 3 3
650 0 7 3 3
651 0 7 3 3

max:1 7 4 6 13

所有状态的最速复原都可以分为4步,第一步是把70+70+90这个组合给拆开,第二步是完成1组50+60的合并,第三步是完成2组50+60的合并,第四步是彻底复原

这四步分别最多需要1次、7次、4次、6次大操作,而总共最多需要13次大操作。

{1 7 4 6}这几个数字已经比较小了,所以具备了实际可用的启发功能。

亲测好用,至此,研究工作告一段落。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值