📄 numbercal.java
字号:
package com.john.cal3;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class NumberCal
{
private static int index = 1;
private static int[] s_avNum = {1,2,3,4,5,6,7,8,9,0};
private static PrintWriter pw ;
/**
* @param args
*/
public static void main(String[] args)
{
int [][] n = new int[10][10];
fillnext(n, 1, 1);
pw.close();
// int [][] n ={{0,0,0,0,0,0,0,0,0,0},
// {0,1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 } ,
//
// {0,4 , 5 , 6 , 7 , 8 , 9, 1 , 2 , 3} ,
//
// {0,7 , 8 , 9 , 1 , 2 , 3 , 4 , 5 , 6 } ,
//
// {0,2 , 1 , 4 , 3 , 6 , 5 , 8 , 9 , 7 },
//
// {0,3 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
//
// {0,0 ,0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
//
// {0,0 ,0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
//
// {0,0 ,0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
//
// {0,0 ,0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }};
// int [] result = getAvNum(n, 5, 2);
// System.out.println(result);
}
public static void fillnext(int[][] n, int i_x, int i_y)
{
int x, y;
int[] avNum;
avNum = getAvNum(n, i_x, i_y);
if (avNum == null)
return;
for (int i = 0; i < avNum.length; i++)
{
int[][] n_new = new int[10][10];
for (int j = 0; j < n_new.length; j++)
{
System.arraycopy(n[j], 0, n_new[j], 0, n.length);
}
n_new[i_x][i_y] = avNum[i];
if ((i_x == 9) && (i_y == 9))
{
printResult(n_new);
return;
}
x = i_x + i_y / 9;
if(i_y!=9)
y = i_y +1;
else
y = 1;
// printResult(n_new);
fillnext(n_new, x, y);
}
}
private static void printResult(int[][] n)
{
// System.out.println("----------- "+ index +" --------------:" );
// printNumbers(n);
printToFile(n);
}
private static int[] getAvNum(int[][] n, int x, int y)
{
int[] avBlock;
int[] avRow;
int[] avLine;
avBlock = getAvBlock(n, x, y);
avRow = getAvRow(n, x);
avLine = getAvLine(n, y);
int [] temp = new int[10];
int t_index = 0;
for (int i = 0; i < avRow.length; i++)
{
for (int j = 0; j < avLine.length; j++)
{
if(avRow[i]==avLine[j])
{
for (int k = 0; k < avBlock.length; k++)
{
if(avRow[i]==avBlock[k])
{
temp[t_index++] =avRow[i];
break;
}
}
break;
}
}
}
return getShortArray(temp);
}
private static int[] getAvRow(int[][] n, int x)
{
int[] temp = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for (int i = 1; i < 10; i++)
{
temp[n[x][i]] = 0;
}
return getShortArray(temp);
}
private static int[] getAvLine(int[][] n, int y)
{
int[] temp = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for (int i = 1; i < 10; i++)
{
temp[n[i][y]] = 0;
}
return getShortArray(temp);
}
// /////////////////////////////s
private static int[] getShortArray(int[] temp)
{
int n_index = 0;
for (int i = 0; i < temp.length; i++)
{
if (temp[i] != 0)
n_index++;
}
if (n_index == 0)
return null;
int[] result = new int[n_index];
n_index = 0;
for (int i = 0; i < 10; i++)
{
if (temp[i] != 0)
result[n_index++] = temp[i];
}
return result;
}
private static int[] getAvBlock(int[][] n, int x, int y)
{
int[] temp = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int z;
z = getBlockNum(x, y);
int n_x, n_y;
n_x = (z - 1) / 3;
n_y = (z - 1) % 3;
int n_num = 0;
for (int j = 1; j < 4; j++)
{
for (int k = 1; k < 4; k++)
{
n_num = n[n_x * 3 + j][n_y * 3 + k];
if (n_num != 0)
temp[n_num] = 0;
}
}
return getShortArray(temp);
}
private static int getBlockNum(int x, int y)
{
return ((x - 1) / 3) * 3 + (y - 1) / 3 + 1;
}
public static boolean isFinished(int[][] n)
{
for (int i = 1; i < 10; i++)
{
for (int j = 1; j < 10; j++)
{
if (n[i][j] == 0)
return false;
}
}
return true;
}
private static void printToFile(int[][] n)
{
try
{
FileWriter fw = null;
fw = new FileWriter("d:/date.txt",true);
BufferedWriter bw = new BufferedWriter(fw);
pw = new PrintWriter(bw);
for (int i = 1; i < 10; i++)
{
for (int j = 1; j < 10; j++)
{
pw.print(n[i][j] + " ");
}
pw.println();
pw.println();
}
pw.println("---------------------------------------: "
+ index++);
pw.close();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void printNumbers(int[][] n)
{
for (int i = 1; i < 10; i++)
{
for (int j = 1; j < 10; j++)
{
System.out.print(n[i][j] + " ");
}
System.out.println();
System.out.println();
}
}
public static int[][] cal(int[][] n)
{
int[] a_block;
int[] a_row;
int[] a_line;
int[][] newNumber = null;// = new int[10][10];
for (int i = 1; i < 10; i++)
{
for (int x = 1; x < 10; x++)
{
}
a_block = getAvBlock(n, i);
a_row = getAvRow(n, i);
a_line = getAvLine(n, i);
newNumber = fillBlank(n, a_block, a_row, a_line, i);
}
return newNumber;
}
public static int[] blockHasNum(int[][] n, int num)
{
int[] numRecode = new int[10];
for (int i = 1; i < 10; i++)
{
for (int j = 1; j < 4; j++)
{
for (int k = 1; k < 4; k++)
{
if (n[i * j][k] == num)
numRecode[i] = 1;
}
}
}
return null;
}
// ///new
public static int[] getAvBlock(int[][] n, int num)
{
int[] numRecode = new int[10];
for (int i = 1; i < 10; i++)
{
int x, y;
x = (i - 1) / 3;
y = (i - 1) % 3;
// if(y!=0)
// y=2;
int n_row, n_line;
for (int j = 1; j < 4; j++)
{
for (int k = 1; k < 4; k++)
{
n_row = x * 3 + j;
n_line = y * 3 + k;
if (n[n_row][n_line] == num)
numRecode[i] = 1;
}
}
}
return numRecode;
}
public static int[][] fillBlank(int[][] n, int[] block, int[] row,
int[] line, int num)
{
int[][] newNumber = new int[10][10];
System.arraycopy(n, 0, newNumber, 0, 10);
for (int i = 1; i < 10; i++)
{
if (block[i] == 0)
{
int x, y;
x = (i - 1) / 3;
y = (i - 1) % 3;
int n_row, n_line;
int n_time = 0;
int n_x = 0, n_y = 0;
for (int j = 1; j < 4; j++)
{
for (int k = 1; k < 4; k++)
{
n_row = x * 3 + j;
n_line = y * 3 + k;
if ((n[n_row][n_line] == 0) && (row[n_row] == 1)
&& (line[n_line] == 1))
{
n_x = n_row;
n_y = n_line;
n_time++;
}
}
}
if (n_time == 1)
newNumber[n_x][n_y] = num;
}
}
return newNumber;
}
public static boolean isLineHasNum(int[][] n, int line, int num)// 列
{
for (int i = 1; i < 10; i++)
{
if (n[line][i] == num)
return true;
}
return false;
}
public static boolean isRowHasNum(int[][] n, int row, int num)// 行
{
for (int i = 1; i < 10; i++)
{
if (n[i][row] == num)
return true;
}
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -