• ベストアンサー

タテヨコで数字の被らない二次元配列

23541 32415 14352 45123 51234 のように、タテヨコで数字の被らないN×Nの二次元配列を作成するためには、 どのようなアルゴリズムを考えればよいでしょうか? またこのような配列の名称はありますか? どなたかお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

「ラテン方陣」または「ラテン方格」でググってください。

HisanaEXE
質問者

お礼

どんなラテン方格も行、または列を交換することで標準形にすることができる。 ということは、 適当なラテン方格を作り、ランダムに行や列を交換していけば全てのパターンを作れるという事ですよね?

その他の回答 (2)

回答No.3

それって数独?

HisanaEXE
質問者

お礼

数独にも発展させてみたいですが、今のところ別のパズルゲームを作成しようとしています。

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.1

名前は知りませんが。 単に縦横被らないだけでいいなら、1文字づつずらせばいいです。 23541→35412→54123→41235→12354 逆方向でもいいですね。 余談ですが「8クイーン」と言うのが有ります。 チェスの盤を使って8個のクイーンを8×8の上で 縦横斜めに被らないように並べると言う遊び(パズル)です。 これを解くアルゴリズムを考えるのも結構面白いですよ。

HisanaEXE
質問者

お礼

ymmasayanさん 回答ありがとうございます! 色々な配列を作りたいので、もっとパターンが欲しいです。 8クイーン 面白そうです。 つまり全てのクイーンは他のクイーンを取れないということですね。 最終的に、全てのクイーンがそれぞれどこに動いても関係が崩れる、ようになるかが気になりますね。

関連するQ&A

  • 3次元配列を1次元配列に

    例えば2次元配列だと, array[row*i+j] = a[n]; といったように1次元に直すことができますよね? 同様に3次元配列を1次元配列にしたい場合には arrayの中はどのような式をつかえばいいのでしょうか。 よろしくお願いします。

  • 二次元配列のアルゴリズム

    いま研修でアルゴリズムの基礎を勉強しています。あるテキストで「品目ごとの合計金額と総合計を表示するアルゴリズムを作成せよ」というお題がでたのですが、二次元配列が絡んでくると、どうも分かりません。誰か似たような問題をご存知でしたら、教えて頂けませんか?お願いします。

  • 別次元配列への文字コピー

    別次元配列への文字コピー(not文字列)をする際特別な制約ってありますか? 2次元配列から1次元配列への文字コピー 1次元配列から2次元配列への文字コピー などなど for(i=0,n=0;n<TEISU1;n++){ for(m=0;m<TEISU2;m++,i++){ strcpy(&ABC[m][n],&DEF[i]); printf(" i%d n%d m%d %c %x\n",i,n,m,ABC[m][n],DEF[m][n]); // ★★★★★↑この時点では正しく出ているが } } /**/printf("%s\n",ABC); // ★★★★★↑この時点では出力内容がおかしくなっている 原因がさっぱりわかりません。 原因はどういった事が考えられますか?

  • 4次元配列を2次元配列にするには?

    多次元配列を1次元配列に組み替える方法をよく目にするのですが、4次元配列を2次元配列にする方法がわかりません。 4次元配列で表したものを連立一次方程式で解きたいので2次元配列に置き換えなければなりません。 配列の中はどういう風におけばいいのでしょうか。 よろしくお願いします。

  • 二次元配列のポインタについて教えて下さい

    今日はCの配列のポインタについて質問いたします、宜しくお願いします。 1次元の配列からは、 =================================== int *p , a={1,2,3}; p = &a; printf("%d\n" , p[1] ) ; printf("%d\n" , *p[1] ) ; ===================================== でaの値がとれますが、 二次元の配列では下のような書き方ではエラーになります。 何故でしょうか、どう書いてやればいいのでしょう。 ===============================================  printf("%d\n" , pbb[1][1] ) ;  printf("%d\n" , *pbb[1][1] ) ; =============================================== 宜しくお願いします。

  • 2次元配列とじゃんけんアルゴリズムについて質問

    以下の、過去に私が質問した、2次元配列とじゃんけんアルゴリズムの質問のURLの見た上で私の質問に答えてください。 URL:ttp://okwave.jp/qa/q7038056.html 質問: public static int janken(int n){ int[][]tb1={ {9,9,9,9}, {9,0,1,2}, {9,2,0,1}, {9,1,2,0} }; int m=rand3(); System.out.println(m+" "); return tb1[n][m]; } 上記ソースコードの2次元配列について、何故「9」という数字があるのか、又1次元目と2次元目の要素数が「4」あるのかわかりませんでした。 上記のURL先で頂いた回答を元に、私は理解に努めました。その理解が正しいか判定してください。 「この勝敗表をあらわす2次元配列について、それぞれのプレイヤーのジャンケンの『手』を要素番号『1,2,3』に対応させている。つまり要素番号『0』は使っていないので、要素数が4つ必要。 また、要素番号『0』は、このjankenプログラムでは不要なので、何の値が入っても構わないので、『たまたま』9が入ってるだけで、9という数字に特に意味はない。因みに、その2つの要素番号に対応する要素が勝敗の結果の番号になる。」 こういうことでしょうか?

    • ベストアンサー
    • Java
  • 3次元配列から2次元配列に

    3次元配列のデータを2次元配列に移すにはどのように したらよいのでしょうか.とりあえず下記のように考えてみましたが. data3[500][500][4000]; //3次元配列 data2[500][500]; //2次元配列 for(y=0; y<500; y++) for(x=0; x<500; x++){ for(z=0; z<4000; z++){ data2[y][x] = data3[y][x][z]; } } } これでいいのでしょうか?

  • 多次元配列でキーを基準に並び変えする

    すいません。多次元配列でキーを基準に並び変えを行いたいのですが、解説サイトやここでの質問で も解決せず困っています。以下が実際の配列で四次元目の2012010101~2012010107の数字を昇順、 降順で並び変え、k1~k4の値を結果として表示したいのですが、phpでは不可能なのでしょうか? 散々調べましたが、多次元配列の値で並び替えるというのは見つけたのですが、私が行いたいのは あくまでキーの数字で並び変えです。 詳しい方いましたらアドバイスいただければ助かります $food["y"]["bi"]["1"]["2012010101"]= "k1"; $food["y"]["ko"]["2"]["2012010104"]= "k2"; $food["n"]["dou"]["3"]["2012010105"]= "k3"; $food["y"]["dou"]["4"]["2012010106"]= "k4"; $food["n"]["bi"]["5"]["2012010107"]= "k5";

    • ベストアンサー
    • PHP
  • 多次元配列への数値の代入。

    こんにちは。 今、多次元配列への数値の代入の仕方で、悩んでいます。 A[][] = new int[n][n]; B[][] = new int[n][n]; 上記のようなn行n列の配列を宣言し、nを入力します。 例えば、n=100と入力すると、100行100列の配列を定義したことになり、Aの配列には1~10000、Bの配列には10001~20000の数値を代入、200×200であれば1~40000、40001~80000…という感じにしたいのですが、いいアイディアが浮かびません。 また、1~nの間でランダムに数値を選び、その数値を代入というのも考えましたが、Javaで乱数を代入できるのかな?という疑問が出来てしまい、わからなくなってしまいました。 何かいい考えがありましたら、ぜひ教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 動的に多次元配列を使用したい

    動的に多次元配列を使用したい お世話になります。 adobe flash professional :ActionScript 3.0 を使用しています。 例えば、 [ア][あ] [イ][い] [ウ][う] ・ ・ ・ の、x行・2列の動的な多次元配列を使用したいのですが、 動的な多次元配列の作成の仕方を教えて頂けないでしょうか? お手数ですがよろしくお願いします。

    • ベストアンサー
    • Flash

専門家に質問してみよう