• Source
    1. /*
    2.  * To change this license header, choose License Headers in Project Properties.
    3.  * To change this template file, choose Tools | Templates
    4.  * and open the template in the editor.
    5.  */
    6.  
    7.  
    8.  
    9. import java.util.ArrayList;
    10. import java.util.Collections;
    11. import java.util.HashSet;
    12. import java.util.Set;
    13.  
    14. class Sudo {
    15.  
    16. public static boolean checker(int[][] bs, int i, ArrayList<Integer> ar) {
    17. ArrayList<Integer> temp_ar = new ArrayList<Integer>();
    18. boolean check1 = true; //For returning true for good Sudoku
    19. for(int e=0;e<9;e++){
    20. bs[i][e] = ar.get(e);
    21. }
    22.  
    23. for(int t=0;t<9;t++){
    24. for(int e=0;e<=i;e++){
    25.  
    26. temp_ar.add(e, bs[e][t]);
    27.  
    28. }
    29. Set<Integer> temp_set = new HashSet<Integer>(temp_ar);
    30. if(temp_set.size()<temp_ar.size()){
    31. check1 = false; break; //Something smelly
    32. }
    33. else {
    34. temp_ar.clear();
    35. temp_set.clear();
    36. }
    37. }
    38. return check1;
    39. }
    40. /**
    41.   * @param args the command line arguments
    42.   */
    43.  
    44. public static void main(String[] args) {
    45. ArrayList<Integer> ar = new ArrayList<Integer>();
    46. int[][] bs = new int[9][9];
    47. for(int i=0;i<9;i++){
    48. ar.add(i+1);
    49. // System.out.print(ar.get(i));
    50. }
    51. Collections.shuffle(ar);
    52.  
    53.  
    54.  
    55. for(int i=0;i<1;i++){
    56. for(int j=0;j<9;j++){
    57.  
    58. bs[i][j] = ar.get(j);
    59. }
    60.  
    61. }
    62. boolean check = true;
    63. for(int i=0;i<9;i++){
    64. if(i==3 ){
    65. check = checkPath(bs, i);
    66. if(check==false)
    67. i=i-2;
    68. //System.out.print("Haiii");
    69. }
    70. if(i==6){
    71. check = checkPath(bs,i);
    72. if(check==false){
    73. i=i-2;
    74. }
    75. }
    76.  
    77. for(int j=0;j<9;j++){
    78. if(i>0) {
    79. check = checker(bs,i,ar);
    80. if(check==false){
    81. i--;
    82. break;
    83. }
    84. else {
    85. bs[i][j]=ar.get(j);
    86. }
    87. }
    88.  
    89. }
    90.  
    91. Collections.shuffle(ar);
    92. }
    93.  
    94. for(int i=0;i<9;i++){
    95. for(int j=0;j<9;j++){
    96.  
    97. System.out.print(bs[i][j]+" ");
    98. if(j==2)
    99. System.out.print("| ");
    100. if(j==5) System.out.print("| ");
    101.  
    102. }
    103. System.out.print("\n");
    104. if(i==2) System.out.print("- - - - - - - - - - -\n");
    105. if(i==5) System.out.print("- - - - - - - - - - -\n");
    106. }
    107. }
    108.  
    109. public static boolean checkPath(int[][] bs, int i) {
    110. //boolean check_cP = false;
    111. ArrayList<Integer> temp_cP = new ArrayList<Integer>();
    112. Set<Integer> temp_setcP = new HashSet<Integer>();
    113. boolean denoter = true;
    114. while(i==3){
    115. for(int k =0;k<i;k++ ){
    116. for(int e=0;e<3;e++){
    117. temp_cP.add(e, bs[k][e]);
    118. }
    119. }
    120. temp_setcP = new HashSet<Integer>(temp_cP);
    121. if(temp_cP.size()>temp_setcP.size()){
    122. denoter = false;break;
    123.  
    124. }
    125. else {
    126. temp_cP.clear();
    127. temp_setcP.clear();
    128.  
    129. for(int k =0;k<i;k++ ){
    130. for(int e=3;e<6;e++){
    131. temp_cP.add(bs[k][e]);
    132. }
    133. }
    134. temp_setcP = new HashSet<Integer>(temp_cP);
    135. if(temp_cP.size()>temp_setcP.size()){
    136. denoter = false;break;
    137.  
    138. }
    139. else {
    140. break;
    141. }
    142. }
    143. }
    144. while(i==6){
    145.  
    146. for(int k =3;k<i;k++ ){
    147. for(int e=0;e<3;e++){
    148. temp_cP.add(e, bs[k][e]);
    149. }
    150. }
    151. temp_setcP = new HashSet<Integer>(temp_cP);
    152. if(temp_cP.size()>temp_setcP.size()){
    153. denoter = false;break;
    154.  
    155. }
    156. else {
    157. temp_cP.clear();
    158. temp_setcP.clear();
    159.  
    160. for(int k =3;k<i;k++ ){
    161. for(int e=3;e<6;e++){
    162. temp_cP.add(bs[k][e]);
    163. }
    164. }
    165. temp_setcP = new HashSet<Integer>(temp_cP);
    166. if(temp_cP.size()>temp_setcP.size()){
    167. denoter = false;break;
    168.  
    169. }
    170. else {
    171. break;
    172. }
    173. }
    174.  
    175. }
    176. return denoter;
    177. }
    178.  
    179. }