私と友人は、興味深いコンピューター サイエンスの質問について熟考しています。
シンプルな2D Arrayがあります:
[ 1, 2, 3, 4 ]
[ 5, 6, 7, 8 ]
[ 9, 10, 11, 12 ]
[ 13, 14, 15, 16 ]
次に、この配列を取得して、配列内のすべての要素をシャッフルします。
[ 11, 5, 14, 10 ]
[ 8, 2, 4, 16 ]
[ 15, 1, 3, 13 ]
[ 6, 12, 9, 7 ]
最初はかなり単純な概念。しかし、もう一歩踏み出すとどうなるでしょうか。ここで、新しい配列の要素が、元の配列でカーディナル方向に隣接していた項目の隣にならないように、元の配列をシャッフルします。
1 は 2 の隣にあり、元の配列でも 2 の隣にあるため、最初のシャッフルは失敗します。
これが実際の例です:
[ 7, 16, 13, 2 ]
[ 14, 3, 5, 8 ]
[ 9, 1, 4, 11 ]
[ 12, 10, 15, 6 ]
それでも悪くない。さて、本当の質問に!
元の配列を再びシャッフルして、配列の要素が基数方向または対角線のいずれかで隣接していた要素の隣にならないようにします。
1 は斜めに 5 の隣にあり、元の配列では 5 の隣にあるため、この作業例は失敗します。
いくつかの考え:
- 配列を決定することさえできますか?
- 配列のサイズに依存しますか?
- 配列は対称である必要がありますか?
- 配列には偶数/奇数の要素が必要ですか?
- サイズM x Nのすべての配列に解が適用されますか?
- 解決策がある場合、新しいアレイを見つけるのにかかる時間はどれくらいですか?
どう思いますか?
編集
私の質問が「トピック外」として閉じられていることに驚いています。FAQによると、私の質問が「...一般的に特定のプログラミングの問題をカバーしている...」場合、それは尋ねられることが許可されており、「トピック外」ではありません。
私が求めていた最終的な質問は次のとおりです。
「2D配列を取り、それをシャッフルして、対角線を含め、新しい配列でメンバーが互いに隣り合わないようにすることはできますか」.
それは良いプログラミングの質問ではありませんか? 私の質問はクローズされるべきではないと強く感じています。