名分别为 A B C D E F G H 的八个框随机填入1 2 3 4 5 6 7 8 八个数字,
如:
A B C D E F G H
4 2 3 6 8 1 5 7
按交换规则交换后,要求结果为:
A B C D E F G H
1 2 3 4 5 6 7 8
数字变换规则由用户指定,命名为:甲、乙、丙......
如:
甲:A->B,B->C,C->A(即A框的数字转移到B框,B框的数字转移到C框,C框的数字转移到A框)
乙:E->F,G->H
丙等等
每个规则可重复使用或不使用,求换至
A B C D E F G H
1 2 3 4 5 6 7 8
的最少步骤及其顺序(即所使用的甲、乙、丙...的顺序)。
如问:
A B C D E F G H
2 3 1 4 6 5 8 7
甲:A->B,B->C,C->A; 乙:E->F,G->H; 丙:E->H,H->E
答案为:甲乙
如:
A B C D E F G H
4 2 3 6 8 1 5 7
按交换规则交换后,要求结果为:
A B C D E F G H
1 2 3 4 5 6 7 8
数字变换规则由用户指定,命名为:甲、乙、丙......
如:
甲:A->B,B->C,C->A(即A框的数字转移到B框,B框的数字转移到C框,C框的数字转移到A框)
乙:E->F,G->H
丙等等
每个规则可重复使用或不使用,求换至
A B C D E F G H
1 2 3 4 5 6 7 8
的最少步骤及其顺序(即所使用的甲、乙、丙...的顺序)。
如问:
A B C D E F G H
2 3 1 4 6 5 8 7
甲:A->B,B->C,C->A; 乙:E->F,G->H; 丙:E->H,H->E
答案为:甲乙
比如 甲:A->B,B->C,C->A,B->A我最后不需要B->A了。
如问:
A B C D E F G H
2 3 1 4 6 5 8 7
甲:A->B,B->C,C->A; 乙:E->F,G->H; 丙:E->H,H->E
答案为:甲乙按顺序也不该是这答案啊?
应该是乙:E->F,F->E,G->H,H->G;
就没错了
穷举吧,递归来做。procedure DoExchange(方案N,更换结果);
begin
按方案N更换处理->更换结果,记录顺序。
比较是否合适,合适了,EXIT;
for i := 0 to 方案个数-1 do
begin
本次已使用的方案不用
DoExchange(方案i,更换结果)
end;
end;调用:
for i := 0 to 方案个数-1 do
begin
DoExchange(方案i,更换结果)
end;
我是新手,可以把整个代码写给我吗?每个规则可重复使用或不使用
A->B,B->C,C->A
A--B 数字变成 3 2 1 4 ...
B--C 3 1 2 4...
C--A 2 1 3 4
还得加个A--B啊