Guest User

Untitled

a guest
Apr 23rd, 2013
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.47 KB | None | 0 0
  1. package sudoku;
  2.  
  3. import java.util.Random;
  4.  
  5. import javax.swing.JFrame;
  6.  
  7. public class sudoku1
  8. {
  9.     public static int[][] set()
  10.     {
  11.        
  12.         int[][] board =
  13.             {
  14.                 {0,0,0,0,0,0,0,0,0},
  15.                 {0,0,0,0,0,0,0,0,0},
  16.                 {0,0,0,0,0,0,0,0,0},
  17.                 {0,0,0,0,0,0,0,0,0},
  18.                 {0,0,0,0,0,0,0,0,0},
  19.                 {0,0,0,0,0,0,0,0,0},
  20.                 {0,0,0,0,0,0,0,0,0},
  21.                 {0,0,0,0,0,0,0,0,0},
  22.                 {0,0,0,0,0,0,0,0,0}
  23.             };
  24.        
  25.         if(Solve(board))
  26.         {
  27.         shuffle(board);
  28.         }
  29.         return board;
  30.     }
  31.  
  32.     public static void Print(int[][] board)
  33.     {
  34.         for(int i=0; i<9; i++)
  35.         {
  36.             for(int j=0; j<9; j++)
  37.             {
  38.                 System.out.print(board[i][j]+" ");
  39.             }
  40.             System.out.println();
  41.         }
  42.     }
  43.    
  44.     public static boolean Solve(int board[][])
  45.     {
  46.         int [][] status= new int[board.length][board[0].length];
  47.          for (int i=0; i<9; i++)
  48.          {
  49.              for(int j=0; j<9; j++)
  50.              {
  51.                  status[i][j]= board[i][j]>0?2:0;
  52.              }
  53.          }
  54.          
  55.           return Solve(board, status,0,0);
  56.          
  57.     }
  58.    
  59.     public static boolean Solve (int[][] board, int[][] status, int x, int y)
  60.     {
  61.        
  62.         if (x==9)
  63.         {
  64.             int count= 0;
  65.             for (int i=0; i<9; i++)
  66.             {
  67.                 for(int j=0; j<9; j++)
  68.                 {
  69.                     count+= status[i][j]>0?1:0;
  70.                 }
  71.             }
  72.            
  73.             if(count==81)
  74.             {
  75.                 return true;
  76.             }
  77.             else
  78.             {
  79.                 return false;
  80.             }
  81.            
  82.         }
  83.        
  84.         if(status[x][y]>=1)
  85.         {
  86.             int nextX= x;
  87.             int nextY= y+1;
  88.             if(nextY==9)
  89.             {
  90.                 nextX= x+1;
  91.                 nextY=0;
  92.             }
  93.            
  94.             return Solve(board, status, nextX, nextY);
  95.         }
  96.         else
  97.         {
  98.             boolean[] used= new boolean[9];
  99.             for(int i=0;i<9;i++)
  100.             {
  101.                 if(status[x][i]>=1)
  102.                 {
  103.                     used[board[x][i]-1]=true;
  104.                 }
  105.             }
  106.            
  107.             for(int i=0; i<9;i++)
  108.             {
  109.                 if(status[i][y]>=1)
  110.                 {
  111.                     used[board[i][y]-1]= true;
  112.                 }
  113.             }
  114.            
  115.             for(int i=x-(x%3);i<x-(x%3)+3;i++)
  116.             {
  117.                 for (int j=y-(y%3);j<y-(y%3)+3;j++)
  118.                 {
  119.                     if(status[i][j]>=1)
  120.                     {
  121.                         used[board[i][j]-1]= true;
  122.                     }
  123.                 }
  124.             }// For cikla beigas
  125.            
  126.             for (int i=0; i<used.length;i++)
  127.             {
  128.                 if(!used[i])
  129.                 {
  130.                     status[x][y] = 1;
  131.                     board[x][y]= i+1;
  132.                    
  133.                     int nextX= x;
  134.                     int nextY=y+1;
  135.                    
  136.                     if(nextY==9)
  137.                     {
  138.                         nextX= x+1;
  139.                         nextY= 0;
  140.                     }
  141.                    
  142.                     if(Solve(board, status, nextX, nextY))
  143.                     {
  144.                         return true;
  145.                     }
  146.                    
  147.                     for(int m=0; m<9; m++)
  148.                     {
  149.                         for (int n=0; n<9; n++)
  150.                         {
  151.                             if(m>x||(m==x&&n>=y))
  152.                             {
  153.                                 if(status[m][n]==1)
  154.                                 {
  155.                                     status[m][n]=0;
  156.                                     board[m][n]=0;
  157.                                 }
  158.                             }
  159.                         }
  160.                 }
  161.                
  162.                
  163.                 }
  164.             } // for cikla beigas
  165.            
  166.         }
  167.  
  168.         return false;
  169.     }
  170.    
  171.     public static void shuffle(int[][] table)
  172.     {
  173.         Random rand= new Random();
  174.        
  175.         for(int i=0; i<100;i++) // cik reizes šo visu darīs.
  176.         {
  177.  
  178.             for(int j=0;j<9;j++)
  179.             {
  180.                 for(int k= j;k<9; k++ )
  181.                 {
  182.                     int change_value=table[j][k];
  183.                     table[j][k]=table[k][j];
  184.                     table[k][j]=change_value;
  185.                 }
  186.             }
  187.            
  188.             for(int j=0; j< 1000;j++) //cik reizes samainīs rindas.
  189.             {
  190.                 int row= rand.nextInt(9);
  191.                 int which= which_one(row);
  192.                
  193.  
  194.                
  195.                 for(int k=0; k<9;k++) //rindu maiņa.
  196.                 {
  197.                     int change_value=table[row][k];
  198.                     table[row][k]=table[which][k];
  199.                     table[which][k]=change_value;
  200.                 }
  201.                 for(int k=0; k<9;k++) //kolonu maiņa maiņa.
  202.                 {
  203.                     int change_value=table[k][row];
  204.                     table[k][row]=table[k][which];
  205.                     table[k][which]=change_value;
  206.                 }
  207.                
  208.                 switch(rand.nextInt(3)) // Saimaina ||
  209.                 {
  210.                 case 0:
  211.                         row=3+ rand.nextInt(2)*3;
  212.                         for(int l=0;l<3;l++)
  213.                             {
  214.                                 for (int k=0;k<9;k++)
  215.                                 {
  216.                                     int change_value=table[l][k];
  217.                                     table[l][k]=table[l+row][k];
  218.                                     table[l+row][k]=change_value;
  219.                                 }
  220.                             }
  221.                         break;
  222.                        
  223.                 case 1:
  224.                     row=(int) (3* Math.pow(-1, rand.nextInt(2)+1));
  225.                     for(int l=3;l<6;l++)
  226.                         {
  227.                             for (int k=0;k<9;k++)
  228.                             {
  229.                                 int change_value=table[l][k];
  230.                                 table[l][k]=table[l+row][k];
  231.                                 table[l+row][k]=change_value;
  232.                             }
  233.                         }
  234.                     break;
  235.                    
  236.                 case 2:
  237.                     row=-3- rand.nextInt(2)*3;
  238.                     for(int l=6;l<9;l++)
  239.                         {
  240.                             for (int k=0;k<9;k++)
  241.                             {
  242.                                 int change_value=table[l][k];
  243.                                 table[l][k]=table[l+row][k];
  244.                                 table[l+row][k]=change_value;
  245.                             }
  246.                         }
  247.                     break;
  248.                        
  249.                 }
  250.                
  251.                 switch(rand.nextInt(3)) // Saimaina =
  252.                 {
  253.                 case 0:
  254.                         row=3+ rand.nextInt(2)*3;
  255.                         for(int l=0;l<3;l++)
  256.                             {
  257.                                 for (int k=0;k<9;k++)
  258.                                 {
  259.                                     int change_value=table[k][l];
  260.                                     table[k][l]=table[k][l+row];
  261.                                     table[k][l+row]=change_value;
  262.                                 }
  263.                             }
  264.                         break;
  265.                        
  266.                 case 1:
  267.                     row=(int) (3* Math.pow(-1, rand.nextInt(2)+1));
  268.                     for(int l=3;l<6;l++)
  269.                         {
  270.                             for (int k=0;k<9;k++)
  271.                             {
  272.                                 int change_value=table[k][l];
  273.                                 table[k][l]=table[k][l+row];
  274.                                 table[k][l+row]=change_value;
  275.                             }
  276.                         }
  277.                     break;
  278.                    
  279.                 case 2:
  280.                     row=-3- rand.nextInt(2)*3;
  281.                     for(int l=6;l<9;l++)
  282.                         {
  283.                             for (int k=0;k<9;k++)
  284.                             {
  285.                                 int change_value=table[k][l];
  286.                                 table[k][l]=table[k][l+row];
  287.                                 table[k][l+row]=change_value;
  288.                             }
  289.                         }
  290.                     break;
  291.                        
  292.                 }
  293.                                
  294.             }
  295.            
  296.  
  297.         }
  298.        
  299.        
  300.     }
  301.    
  302.  
  303.     public static int which_one(int row)
  304.     {
  305.         Random rand= new Random();
  306.         switch(row)
  307.         {
  308.         case 0: return row+ rand.nextInt(3);
  309.         case 1: return (int) (row+ Math.pow(-1,rand.nextInt(2)+1)*rand.nextInt(2));
  310.         case 2: return row- rand.nextInt(3);
  311.         case 3: return row+ rand.nextInt(3);
  312.         case 4: return (int) (row+ Math.pow(-1,rand.nextInt(2)+1)*rand.nextInt(2));
  313.         case 5: return row- rand.nextInt(3);
  314.         case 6: return row+ rand.nextInt(3);
  315.         case 7: return (int) (row+ Math.pow(-1,rand.nextInt(2)+1)*rand.nextInt(2));
  316.         case 8: return row- rand.nextInt(3);
  317.         default: return 0;                   
  318.         }
  319.     }
  320.    
  321.     public static void remove(int[][] table)
  322.     {
  323.         for(int i=0;i<9;i++)
  324.         {
  325.             for(int j=0; j<9;j++)
  326.             {
  327.                 switch(i)
  328.                 {
  329.                 case 0:
  330.                 case 8:
  331.                     if(j==2||j==3||j==5||j==6)
  332.                     {
  333.                         break;
  334.                     }
  335.                     table[j][i]=0;
  336.                     break;
  337.                    
  338.                 case 1:
  339.                 case 7:
  340.                     if(j==4||j==8)
  341.                     {
  342.                         break;
  343.                     }
  344.                     table[j][i]=0;
  345.                     break;
  346.                    
  347.                
  348.                 case 3:
  349.                 case 5:
  350.                 case 2:
  351.                 case 6:
  352.                     if(j==0||j==8)
  353.                     {
  354.                         break;
  355.                     }
  356.                     table[j][i]=0;
  357.                     break;
  358.                    
  359.                 case 4:
  360.                     if(j==1||j==8)
  361.                     {
  362.                         break;
  363.                     }
  364.                     table[j][i]=0;
  365.                     break;
  366.                 }
  367.             }
  368.         }
  369.     }
  370.  
  371. }
Advertisement
Add Comment
Please, Sign In to add comment