Java Sudoku解决方案验证程序 [英] Java Sudoku Solution Verifier

查看:70
本文介绍了Java Sudoku解决方案验证程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在尝试创建一个Java程序,该程序将81个整数(1-9)读入9 X 9矩阵,然后进行测试以查看该矩阵是否是Sudoku难题的解决方案. Sudoku解决方案的参数如下:每个数字(1-9)必须在每一行,每一列和3x3正方形中表示,在这些区域中不得重复.我已经编写了一种方法来验证是否所有行和列都满足参数,但是,我正在努力提出一种算法来验证平方.这是我到目前为止的内容:

I am currently attempting to create a Java program that reads 81 integers (1-9) into an 9 X 9 matrix, and then tests to see if that matrix is a solution to a Sudoku puzzle. The parameters for a Sudoku solution are as follows: each number (1-9) must be represented in every row, column, and 3x3 square without any repetition in these areas. I have written a method to verify that the parameters are met for all rows and columns, however, I am struggling with coming up with an algorithm to verify the squares. Here is what I have so far:

import java.util.*;
public class SudokuCheck
{
  public static boolean sudokuCheck(int[][] s)
  {
    for(int row=0;row<9;row++)
      for(int col=0;col<8;col++)
      if(s[row][col]==s[row][col+1]){
      return false;}
     //Verifies rows

    for(int col2=0;col2<9;col2++)
      for(int row2=0;row2<8;row2++)
      if (s[row2][col2]==s[row2+1][col2])
      return false;
    //verifies columns

    return true;    
  }


  public static void main (String[] args)
  {
    Scanner input = new Scanner(System.in);

    int[][] solution = new int [9][9];
    System.out.println("Enter the values of a 9 X 9 Sudoku solution");

    for(int i=0;i<9;i++)
      for(int j=0;j<9;j++)
      solution[i][j]=input.nextInt();
    //read values into matrix


    if(sudokuCheck(solution)==true)
      System.out.println("The entered 9 X 9 grid is a solution to a Sudoku puzzle.");
else
  System.out.println("The entered 9 X 9 grid is not a solution to a Sudoku puzzle.");
  }
}

推荐答案

虽然可以按照您的方法进行优化

This can probably be optimized but following your approach

// row checker
for(int row = 0; row < 9; row++)
   for(int col = 0; col < 8; col++)
      for(int col2 = col + 1; col2 < 9; col2++)
         if(s[row][col]==s[row][col2])
            return false;

// column checker
for(int col = 0; col < 9; col++)
   for(int row = 0; row < 8; row++)
      for(int row2 = row + 1; row2 < 9; row2++)
         if(s[row][col]==s[row2][col])
            return false;

// grid checker
for(int row = 0; row < 9; row += 3)
   for(int col = 0; col < 9; col += 3)
      // row, col is start of the 3 by 3 grid
      for(int pos = 0; pos < 8; pos++)
         for(int pos2 = pos + 1; pos2 < 9; pos2++)
            if(s[row + pos%3][col + pos/3]==s[row + pos2%3][col + pos2/3])
               return false;

这篇关于Java Sudoku解决方案验证程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆