importjava.util.Scanner;
public class CheckShuDuKuSolution {
public static void main(String[] args) {
// TODO 自动生成的方法存根
//读取数组
int[][] grid=readASolution();
System.out.println(isValid(grid)?"Valid slution":"Invalid solution");
}
//从控制台读取二维数组
public static int[][] readASolution(){
//给予读取指令
Scanner input=new Scanner(System.in);
System.out.println("输入二维数组:");
int[][] grid=new int[9][9];
for(int i=0;i<grid.length;++i)
for(int j=0;j<grid[i].length;++j)
grid[i][j]=input.nextInt();
input.close();
return grid;
}
//测试输入的数组是否有效
public static boolean isValid(int[][] grid){
for(int i=0;i<grid.length;++i)
for(int j=0;j<grid[i].length;++j)
if(grid[i][j]<1||grid[i][j]>9||!isValid(i,j,grid))
return false;
return true; //成功即为有效
}
//测试输入的数组元素均满足"九宫数组解法"之一
public static boolean isValid(int i, int j, int[][] grid){
//测试行唯一
for(int colnum=0;colnum<9;++colnum)
if(colnum!=j&&grid[i][colnum]==grid[i][j])
return false;
//测试列唯一
for(int row=0;row<9;++row)
if(row!=i&&grid[row][j]==grid[i][j])
return false;
//测试在3*3的格网也是唯一
for(int row=(i/3)*3;row<(i/3)*3+3;++row) //格网的位移由int的取值方式决定
for(int col=(j/3)*3;col<(j/3)*3+3;++col)
if(row!=i&&col!=j&&grid[row][col]==grid[i][j])
return false;
return true;
}
}