A.Grandpa's Rubik CubePKU 1290http://poj.org/problem?id=1290题意:给定一个3X3的六面魔方(每个面有3X3个块),求经过某些旋转之后能否使得所有面的颜色都相同,旋转包括对某个面进行顺时针和逆时针旋转(共12种情况)。图A-1如图1,输入数据为左图的形式,右图给对应的面编号,箭头方向为顺时针旋转方向。+A表示对A这个面进行一次顺时针旋转,-B表示对B这个面进行一次逆时针旋转。问经过一定的+A/-B操作之后能否使得所有面的3X3个字母都相同。题解:模拟题做法很多,这里介绍一种比较容易理解的状态记录方式,考虑某次旋转,一定是旋转某个面,然后对邻接的四个面的某条边进行顺次平移。如图A-2, 2号面的旋转带动的是1、5、3、6四个面。图A-2我用一个数组rotate_n来记录某个面旋转的时候带动的面的编号集合(编号为0的数据为占位符),那么有:int rotate_n [7][4] = {{0, 0, 0, 0}, {4, 5, 2, 6}, {1, 5, 3, 6}, {2, 5, 4, 6}, {3, 5, 1, 6}, {1, 4, 3, 2}, {1, 2, 3, 4}};光记录带动的面是哪些还不够,还需要知道带动面的对应边,对于一个魔方的一个面,我们编号如下:(0,0)(0,1)(0,2)(1,0)(1,1)(1,2)(2
...
继续阅读
(44)