名分别为 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
答案为:甲乙

解决方案 »

  1.   

    转换规则可以不按顺序吗?可以不用完吗?
    比如 甲:A->B,B->C,C->A,B->A我最后不需要B->A了。
      

  2.   

    按顺序就比较讨厌了,动了前面又影响到后面了。
    如问:
    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
    答案为:甲乙按顺序也不该是这答案啊?
      

  3.   

    哦,搞错了,对不起对不起,
    应该是乙:E->F,F->E,G->H,H->G; 
      

  4.   

    反正一个框不可以装两个数字,E框里的数字转移到F,而F的没处转就要转回E,就我上面说的规则“乙:E->F,F->E,G->H,H->G; ”
    就没错了
      

  5.   

    A->B,B->C,C->A这个也不对啊。
    穷举吧,递归来做。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;    
      

  6.   

    A->B,B->C,C->A这个没错吧,就是原来在A框里的数字转移到B框,原来在B框的数字转移到C框,原来在C框的数字转移到A框
    我是新手,可以把整个代码写给我吗?每个规则可重复使用或不使用
      

  7.   

    你不是说要按顺序吗?
    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啊