题解 P2007 【魔方】

· · 题解

这题主要是理解,经过分析后,我们可以把六个面分别表示为3*3的二维数组,并用1,2,3,4,5,6分别表示前、后、左、右、上、下,也就是一个6*3*3的三维数组。这样,得到以下四种模型:

操作1:

  for i:=1 to 3 do
  begin
  b[1,i,3]:=a[6,i,3];
  b[6,i,3]:=a[2,i,3];
  b[2,i,3]:=a[5,i,3];
  b[5,i,3]:=a[1,i,3];
  end;
  for i:=1 to 3 do
    for j:=1 to 3 do
    b[4,j,4-i]:=a[4,i,j];

其中a是转换前的,b是转换后的。下面的是一个意思。 操作2:

  for i:=1 to 3 do
  begin
  b[1,i,3]:=a[5,i,3];
  b[5,i,3]:=a[2,i,3];
  b[2,i,3]:=a[6,i,3];
  b[6,i,3]:=a[1,i,3];
  end;
  for i:=1 to 3 do
    for j:=1 to 3 do
    b[4,4-j,i]:=a[4,i,j];

操作3:

  for i:=1 to 3 do
  begin
  b[1,1,i]:=a[3,1,i];
  b[3,1,i]:=a[2,1,i];
  b[2,1,i]:=a[4,1,i];
  b[4,1,i]:=a[1,1,i];
  end;
  for i:=1 to 3 do
    for j:=1 to 3 do
    b[5,j,4-i]:=a[5,i,j];

操作4:

  for i:=1 to 3 do
  begin
  b[1,1,i]:=a[4,1,i];
  b[4,1,i]:=a[2,1,i];
  b[2,1,i]:=a[3,1,i];
  b[3,1,i]:=a[1,1,i];
  end;
  for i:=1 to 3 do
    for j:=1 to 3 do
    b[5,4-j,i]:=a[5,i,j];
当然,自己手边有个魔方的话,很容易发现这个规律,没有的话也可以看样例自己找。