数独,用java实现

一.介绍

程序调用readSolutionO方法来读取一个数独的解决方案,并且返回一个表示数独网格的二维数组。isValid(grid)方法通过检査每个值是否都是从1到9的数字以及每个网格中值是否都是有效的,来确认网格中是否放入了正确的值。isValid(i,j.grid)方法检査grid[i][j]的值是否是有效的。它检査grid[i][;j]在第i行、第j列,以及3x3的方盒中是否出现超过一次。

二.代码

package com.zhuo.base;

import java.util.Scanner;

public class CheckSudocuSolution {
    
    
    public static void main(String[] args) {
    
    
        int[][] grid = readSolution();//读取数独解
        System.out.println(isvalid(grid) ? "valid solution" : "invalid solution");
    }
    /*从控制台读取数独解决方案*/
    public static int[][] readSolution() {
    
    
        Scanner input = new Scanner(System.in);
        System.out.println("Enter a sudoku puzzle solution: ");
        int[][] grid = new int[9][9];
        for (int i = 0; i < 9; i++) {
    
    
            for (int j = 0; j <9; j++)
                grid[i][j] = input.nextInt();
        }
        return grid;
    }
    /*检查解决方案是否有效*/
    public static boolean isvalid(int[][] grid) {
    
    
        for (int i = 0; i < 9; i++) {
    
    
            for (int j = 0; j < 9; j++)
                if (grid[i][j] < 0 || grid[i][j] > 9 || !isvalid(i, j, grid))
                    return false;
        }
        return true;
    }
    public static boolean isvalid(int i, int j, int[][] grid) {
    
    
        /*检查网格[i][j]在j的行中是否唯一*/
        for (int row = 0; row < 9; row++)
            if (row != i && grid[row][j] == grid[i][j])
                return false;
            /*检查网格[i][j]在i的行中是否唯一*/
        for (int column = 0; column < 9; column++)
            if (column != j && grid[i][column] == grid[i][j])
                return false;
        for (int row = (i / 3) * 3; row < (i / 3) * 3 + 3; row++ )
            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;
    }
}

三.结果实现

Enter a sudoku puzzle solution: 
9 6 3 1 7 4 2 5 8
1 7 8 3 2 5 6 4 9
2 5 4 6 8 9 7 3 1
8 2 1 4 3 7 5 9 6
4 9 6 8 5 2 3 1 7
7 3 5 9 6 1 8 2 4
5 8 9 7 1 3 4 6 2
3 1 7 2 4 6 9 8 5
6 4 2 5 9 8 1 7 3
valid solution

Process finished with exit code 0

猜你喜欢

转载自blog.csdn.net/weixin_42768634/article/details/113731465