welcome: please sign in
location: "解のある配置を作る"の差分
1と7のリビジョン間の差分 (その間の編集: 6回)
2009-12-04 06:16:15時点のリビジョン1
サイズ: 689
編集者: masahiko
コメント:
2009-12-22 12:04:41時点のリビジョン7
サイズ: 1021
編集者: masahiko
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 3: 行 3:
{{{
 void mazeru()

右下の1つを除いた他のピースをばらばらに入れ替えた後、
スライドするだけで元の位置に戻すパズルです。

----
置換

ものの並びの順番を入れ替える操作を置換と言います。

並べるものの一つ一つを数で表すことにすると、
例えば5つのものの並びは
(1,2,3,4,5)や(1,3,5,4,2)や(4,3,2,5,1)
などのように書けます。

1番目の並びを2番目の並びに変える操作は置換の1つで
(1,2,3,4,5)
(1,3,5,4,2)
と表します。



----
{{{#!java
 void shokika()
行 6: 行 28:
  int i, j, x1, y1, x2, y2, w;
  
  ban = new int[nx][ny];
  for(i = 0; i < nx; i++) // 元の位置
   for(j = 0; j < ny; j++)
    ban[i][j] =i + j * nx;
  spx = nx-1; // 空白の位置
  spy = ny-1;
  for(i = 0; i < (nx*ny*2); i++) // 偶数回置換
  int x, y, x2, y2, w, cnt;
  ...
  ...
  for (cnt = 0; cnt < (tate*yoko*2); cnt++)
行 16: 行 33:
   do    x = (int)(Math.random() * (yoko-1));
   y = (int)(Math.random() * (tate-1));
   if(Math.random() < 0.5)
行 18: 行 37:
    x1 = (int)(Math.random() * nx);
    y1 = (int)(Math.random() * ny);
    x2 = (int)(Math.random() * nx);
    y2 = (int)(Math.random() * ny);
   } while ( (x1 == x2 && y1 == y2) ||
    (x1 == spx && y1 == spy) || (x2 == spx && y2 == spy) );
   w = ban[x1][y1];
   ban[x1][y1] = ban[x2][y2];
    x2 = x;
    y2 = y + 1;
   }
   else
   {
    x2 = x + 1;
    y2 = y;
   }
   w = ban[x][y];
   ban[x][y] = ban[x2][y2];

ばらばらにする

右下の1つを除いた他のピースをばらばらに入れ替えた後、 スライドするだけで元の位置に戻すパズルです。


置換

ものの並びの順番を入れ替える操作を置換と言います。

並べるものの一つ一つを数で表すことにすると、 例えば5つのものの並びは (1,2,3,4,5)や(1,3,5,4,2)や(4,3,2,5,1) などのように書けます。

1番目の並びを2番目の並びに変える操作は置換の1つで (1,2,3,4,5) (1,3,5,4,2) と表します。


   1         void shokika()
   2         {
   3                 int x, y, x2, y2, w, cnt;
   4                 ...
   5                 ...
   6                 for (cnt = 0; cnt < (tate*yoko*2); cnt++)
   7                 {
   8                         x = (int)(Math.random() * (yoko-1));
   9                         y = (int)(Math.random() * (tate-1));
  10                         if(Math.random() < 0.5)
  11                         {
  12                                 x2 = x;
  13                                 y2 = y + 1;
  14                         }
  15                         else
  16                         {
  17                                 x2 = x + 1;
  18                                 y2 = y;
  19                         }
  20                         w = ban[x][y];
  21                         ban[x][y] = ban[x2][y2];
  22                         ban[x2][y2] = w;
  23                 }
  24         }

解のある配置を作る (最終更新日時 2012-01-25 00:55:25 更新者 masahiko)