こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Javaで数独の自動問題作成プログラム

Javaで次のようなプログラムを作りました。

import java.util.Random;

public class NumberPlace {

public static void main(String[] args) {

int i, j, k, l, check=0, count=0, tmp;
int a[][] = new int [9][9];

Random rnd = new Random();
int ran;

boolean A=false;
while(A==false){
A=true;

for ( i=0; i<9; i++ )
for ( j=0; j<9; j++ )
a[i][j] = 0;
count = 0;

for ( i=0; i<9; i++ ) {
for ( j=0; j<9; j++ ) {
ran = rnd.nextInt(9);
tmp = ran + 1;
check = 0;
//System.out.println(tmp);

for ( k=0; k<j; k++ )
if ( a[i][k] == tmp )
check = 1;

for ( k=0; k<i; k++ )
if ( a[k][j] == tmp )
check = 1;

for ( k=(i/3)*3; k<(i/3)*3+3; k++ )
for ( l=(j/3)*3; l<(j/3)*3+3; l++ )
if ( a[k][l] == tmp )
check = 1;

if ( check == 0 )
a[i][j] = tmp;

if ( check == 1 )
j--;

if ( count > 50000 ){
A=false;break;}
count++;
}

count = 0;

}

      }

for ( i=0; i<9; i++) {
for ( j=0; j<9; j++ ) {
if ( a[i][j] < 10 ) {
System.out.print(" ");
}
System.out.print(a[i][j]);
      }
System.out.print("\n");
}

}

}

これを実行すると、次のようになります。
2 5 3 6 8 4 9 1 7
4 7 9 1 3 5 2 6 8
8 1 6 9 2 7 3 4 5
7 3 5 4 1 6 8 9 2
9 2 1 8 5 3 6 7 4
6 4 8 7 9 2 5 3 1
1 9 4 2 6 8 7 5 3
5 6 2 3 7 1 4 8 9
3 8 7 5 4 9 1 2 6

あとは、ここからランダムに50個数字を抜いて数独の問題にしたいのですが、
どうやったらランダムに数字を抜くことが出来るでしょうか?
プログラムソースを提示していただくとありがたいのですが。宜しくお願いします。

投稿日時 - 2011-02-09 12:00:19

QNo.6509467

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

ランダムに数字を50個抜くのは簡単ですが、それだけではちゃんと解ける数独の問題になりません。
他の人が作った数独の問題作成プログラムを参考にしたいのであれば、たとえば http://puzzle.gr.jp/show/Japanese/NPV2/Download で公開されているものを見てください。

投稿日時 - 2011-02-09 22:41:45

お礼

回答ありがとうございます。
ランダムに数字を抜くことは出来ました。
また質問するときには、宜しくお願いします。

投稿日時 - 2011-02-10 18:35:07

あなたにオススメの質問