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