User: axuhongbo 数独生成器
Time: 2019-08-02 13:42:38package sudo;
import java.util.Random;
import java.util.Scanner;
class Rand_Class{
//public:
int rand_seed;
int Rand_range(int l,int r) {
Random t1 = new Random(rand_seed);
int tt = t1.nextInt(r-l+1)+l;
rand_seed = (rand_seed*rand_seed+7)%10000;
return tt;
}
}
class Martix{
int[][] Mar = {{1,4,5,3,2,7,6,9,8},{8,3,9,6,5,4,1,2,7},{
6,7,2,9,1,8,5,4,3
},{4,9,6,1,8,5,3,7,2},{
2,1,8,4,7,3,9,5,6
},{7,5,3,2,9,6,4,8,1},{
3,6,7,5,4,2,8,1,9
},{
9,8,4,7,6,1,2,3,5
},{
5,2,1,8,3,9,7,6,4
}};
int Seed;
//new int[50][50];
final int Size = 9;
void change_value(int row,int col) {
for(int i=0;i<Size;i++) {
for(int j=0;j<Size;j++) {
if(Mar[i][j]==row) {
Mar[i][j] = col;
}
else if(Mar[i][j]==col) {
Mar[i][j] = row;
}
}
}
}
private void Swap(int i, int j) {
// TODO Auto-generated method stub
int t = i;
i = j;
j = t;
}
void swap_row_base(int L,int R) {
for(int i=0;i<9;i++) {
int t = Mar[L][i];
Mar[L][i] = Mar[R][i];
Mar[R][i] = t;
// Swap(,);
}
}
void swap_col_base(int L,int R) {
for(int i=0;i<9;i++) {
int t = Mar[i][L];
Mar[i][L] = Mar[i][R];
Mar[i][R] = t;
// Swap(,);
}
}
void swap_row(int L,int R) {
for(int i=0;i<3;i++) {
swap_row_base(L+i,R+i);
}
}
void swap_col(int L,int R) {
for(int i=0;i<3;i++) {
swap_col_base(L+i,R+i);
}
}
void init() {
Rand_Class pp = new Rand_Class();
for(int i=0;i<Seed%20+6;i++) {
int h = pp.Rand_range(1,9);
int hh = pp.Rand_range(1,9);
change_value(h,hh);
}
for(int k=0;k<Seed%10;k++) {
int base = 3*pp.Rand_range(0,2);
int i = base+pp.Rand_range(0,2);
int j = base+pp.Rand_range(0,2);
if(i!=j)
swap_row_base(i,j);
i = pp.Rand_range(0,2);
j = pp.Rand_range(0,2);
if(i!=j)
swap_row(3*i,3*j);
base = 3*pp.Rand_range(0,2);
i = base+pp.Rand_range(0,2);
j = base+pp.Rand_range(0,2);
if(i!=j)
swap_col_base(i,j);
i = pp.Rand_range(0,2);
j = pp.Rand_range(0,2);
if(i!=j)
swap_col(3*i,3*j);
}
}
void show() {
int[] book = new int [200];
int Seedt = Seed;
for(int i=0;i<9;i++)
{
int top =1;
for(int j=0;j<9;j++) {
if(top==1)top =0;
else
System.out.printf(" ");
int sum = 3*(i/3)+j/3;
int p;
if(Seed%2==0)p = 3;
else p = 4;
if(book[sum]<p&&Seedt%2==0) {
book[sum]++;
System.out.print(Mar[i][j]);
}
else System.out.print("*");
Seedt++;
}
System.out.println("");
}
}
void show2() {
for(int i=0;i<9;i++) {
int top = 1;
for(int j=0;j<9;j++) {
if(top==1)top =0;
else
System.out.printf(" ");
System.out.print(Mar[i][j]);
}
System.out.println("");
}
}
}
public class Main {
static int seed = 19;
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
seed = sc.nextInt();
Rand_Class r1 = new Rand_Class();
r1.rand_seed = 10;
Martix gg = new Martix();
gg.Seed = seed;
gg.init();
gg.show2();
System.out.println("\n");
gg.show();
// for(int i=1;i<=100;i++) {
// System.out.println(r1.Rand_range(5, 10));
// }
}
}