目录
七彩鹦鹉螺魔方
魔方三要素
(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}这几个数字已经比较小了,所以具备了实际可用的启发功能。
亲测好用,至此,研究工作告一段落。


被折叠的 条评论
为什么被折叠?



