A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. import java.util.Scanner;
  2. class ShuDu
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 int[][] arr=new int[9][9];
  7.                 Scanner sc =new Scanner(System.in);
  8.                 for(int row=1;row<=9;row++)
  9.                 {
  10.                         System.out.println("请输入第"+row+"行的数据,未知数以0代替。");
  11.                         for (int col=1;col<=9 ;col++ )
  12.                         {
  13.                                 arr[row-1][col-1]=sc.nextInt();
  14.                         }
  15.                 }
  16.                 System.out.println("初始数独为:");
  17.                 arrayPrint(arr);
  18.                 int[][] flag0=new int[9][9];
  19.                 for (int i=0;i<9 ;i++ )
  20.                 {
  21.                         for (int j=0;j<9 ;j++ )
  22.                         {
  23.                                 if (arr[i][j]==0)
  24.                                 {
  25.                                         flag0[i][j]=1;   // 以一个int数组空值位,1代表需要填写数字。
  26.                                 }
  27.                         }
  28.                 }
  29.                 fuZhi(arr,flag0);
  30.         }
  31.         public static void arrayPrint(int[][] arr)                 //打印数组函数。
  32.         {
  33.                 System.out.println("----------------------------------");
  34.                 for(int i=0;i<arr.length;i++)
  35.                 {
  36.                         for (int j=0;j<arr[i].length ;j++ )
  37.                         {
  38.                                 System.out.print(arr[i][j]+"\t");
  39.                                 if((j+1)%3==0)
  40.                                 {
  41.                                         System.out.print("|\t");
  42.                                 }
  43.                         }
  44.                         System.out.println();
  45.                         if((i+1)%3==0)
  46.                         {
  47.                                 System.out.println("----------------------------------");
  48.                         }       
  49.                 }
  50.         }
  51.         public static void fuZhi(int[][] arr,int[][] flag0)
  52.         {
  53.                 for (int i=0;i<9 ;i++ )
  54.                 {
  55.                         for (int j=0;j<9 ;j++ )
  56.                         {
  57.                                 if (flag0[i][j]==1)
  58.                                 {
  59.                                         while(arr[i][j]==0||judgeArray(arr,i,j)==false)
  60.                                         {
  61.                                                 arr[i][j]++;
  62.                                                 i1:if(arr[i][j]>9)
  63.                                                 {
  64.                                                         for(int m=i;m>=0;m--)
  65.                                                         {
  66.                                                                 for(int n=j-1;n>=0;n--)
  67.                                                                 {
  68.                                                                         if(flag0[m][n]==1)
  69.                                                                         {
  70.                                                                                 arr[m][n]++;
  71.                                                                                 break i1;
  72.                                                                         }
  73.                                                                 }
  74.                                                         }
  75.                                                 }
  76.                                         }
  77.                                        
  78.                                 }
  79.                         }
  80.                 }
  81.                 arrayPrint(arr);
  82.         }       
  83.         public static boolean judgeArray(int[][] arr,int x,int y)
  84.         {
  85.                 int[][] arr2=new int[3][3]; //获取arr[x][y]所在的9个小方块 并且赋值给arr2【】【】。
  86.                 int flag1=0,flag2=0,flag3=0;
  87.                 for(int i=0;i<3;i++)
  88.                 {
  89.                         for(int j=0;j<3;j++)
  90.                         {
  91.                                 arr2[i][j]=arr[3*(x/3)+i][3*(y/3)+j];
  92.                         }
  93.                 }
  94.                 for(int i=0;i<3;i++)
  95.                 {
  96.                         for(int j=0;j<3;j++)
  97.                         {
  98.                                 if(arr[x][y]==arr2[i][j])              //判断a[x][y]所在的3*3小块中有没有重复。
  99.                                 {
  100.                                         flag3++;
  101.                                 }
  102.                         }
  103.                 }
  104.                 for(int i=0;i<9;i++)  //判断a[][]所在的行除去0以外没有重复。
  105.                 {
  106.                         if (arr[x][y]==arr[x][i])
  107.                         {
  108.                                 flag1++;
  109.                         }
  110.                 }
  111.                 for(int i=0;i<9;i++) // 判断a[][]所在的列除去0以外的没有重复
  112.                 {
  113.                         if (arr[x][y]==arr[i][y])
  114.                         {
  115.                                 flag2++;
  116.                         }
  117.                 }  
  118.                 if(flag1>1||flag2>1||flag3>1)   // 如果以上3个条件有一个重复的,就返回false。
  119.                 {
  120.                         return false;
  121.                 }
  122.                 else
  123.                 {
  124.                         return true;
  125.                 }
  126.         }
  127. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马