Guest User

Untitled

a guest
Apr 19th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 27.33 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. bool row[10][10],col[10][10],sqr[10][10];
  6. int a[10][10];
  7. bool row2[10][10],col2[10][10],sqr2[10][10];
  8. int a2[10][10];
  9. char c[9][10];
  10.   bool ok;
  11.  
  12.  
  13.      
  14.      
  15.      
  16. bool nadole()
  17. {
  18.  
  19. int i,j,k,x,y,z,broj,nekoj,p1=0,p2=0,p3=0,p4=0,p5=0,p6=0,p7=0,p8=0,p9=0,g1=0,g2=0,g3=0,g4=0,g5=0,g6=0,g7=0,g8=0,g9=0,b1=0,b2=0,b3=0,b4=0,b5=0,b6=0,b7=0,b8=0,b9=0,h1=0,h2=0,h3=0,h4=0,h5=0,h6=0,h7=0,h8=0,h9=0,bla;
  20. gore:
  21.      if (a[1][1]==a2[1][1] &&a[1][2]==a2[1][2] && a[1][3]==a2[1][3])
  22.      {
  23.                            
  24.      for (i=1;i<=9;i++)
  25.     for (j=1;j<=9;j++)
  26.     {
  27.         a2[i][j]=a[i][j];
  28.        
  29.     }          
  30. }
  31.                            
  32.   for (i=1;i<=9;i++)
  33.   for (j=1;j<=9;j++)
  34.   if (a2[i][j]==0)
  35.   {
  36.          nekoj=0; bla=0;
  37.         for (broj=1;broj<=9;broj++)
  38.         if (row2[i][broj]==false && col2[j][broj]==false && sqr2[(i-1)/3*3+(j-1)/3+1][broj]==false){ nekoj++; bla=broj; }
  39.         if (nekoj==1)
  40.          if (b4!=0)
  41.           {
  42.                      row2[i][bla]=true;
  43.                      col2[j][bla]=true;
  44.                      sqr2[(i-1)/3*3+(j-1)/3+1][bla]=true;
  45.                      a2[i][j]=bla;
  46.                      b7=i;
  47.                      b8=j;
  48.                      b9=(i-1)/3*3+(j-1)/3+1;
  49.                      
  50.                
  51.                      goto onaka;
  52.         } else
  53.         if (b1!=0)
  54.           {
  55.                      row2[i][bla]=true;
  56.                      col2[j][bla]=true;
  57.                      sqr2[(i-1)/3*3+(j-1)/3+1][bla]=true;
  58.                      a2[i][j]=bla;
  59.                      b4=i;
  60.                      b5=j;
  61.                      b6=(i-1)/3*3+(j-1)/3+1;
  62.                      
  63.                
  64.                      goto gore;
  65.         }
  66.         else
  67.         {
  68.                      row2[i][bla]=true;
  69.                      col2[j][bla]=true;
  70.                      sqr2[(i-1)/3*3+(j-1)/3+1][bla]=true;
  71.                      a2[i][j]=bla;
  72.                      b1=i;
  73.                      b2=j;
  74.                      b3=(i-1)/3*3+(j-1)/3+1;
  75.                  
  76.                      goto gore;
  77.         }
  78. }
  79.  
  80.  
  81. onaka:
  82.  
  83.  
  84.     for (broj=1;broj<=9;broj++)
  85.   {
  86.         for (i=0;i<=2;i++)
  87.         for (j=0;j<=2;j++)
  88.         {
  89.             nekoj=0;
  90.             if (sqr2[i*3+(j+1)][broj]) continue;
  91.             for (x=1;x<=3;x++)
  92.             for (y=1;y<=3;y++)
  93.             if (a2[(i*3)+x][(j*3)+y]!=0 || (row2[(i*3)+x][broj]) || (col2[(j*3)+y][broj])) nekoj++;
  94.           if (nekoj==8)
  95.           for (x=1;x<=3;x++)
  96.           for (y=1;y<=3;y++)
  97.           if (a2[(i*3)+x][(j*3)+y]==0 && !row2[(i*3)+x][broj] && !col2[(j*3)+y][broj])
  98.            if (g4!=0){
  99.                        
  100.                
  101.                      a2[(i*3)+x][(j*3)+y]=broj;
  102.                     row2[(i*3)+x][broj]=true;
  103.                     col2[(j*3)+y][broj]=true;
  104.                     sqr2[(i*3)+j+1][broj]=true;
  105.                     g7=(i*3)+x;
  106.                     g8=(j*3)+y;
  107.                     g9=(i*3)+j+1;
  108.                     goto skip2;        
  109.                  
  110.                        
  111.                        } else
  112.              if (g1!=0){
  113.                        
  114.            
  115.                      a2[(i*3)+x][(j*3)+y]=broj;
  116.                     row2[(i*3)+x][broj]=true;
  117.                     col2[(j*3)+y][broj]=true;
  118.                     sqr2[(i*3)+j+1][broj]=true;
  119.                     g4=(i*3)+x;
  120.                     g5=(j*3)+y;
  121.                     g6=(i*3)+j+1;
  122.                     goto onaka;        
  123.                  
  124.                        
  125.                        } else
  126.              if (p7!=0)
  127.              {
  128.              
  129.                     a2[(i*3)+x][(j*3)+y]=broj;
  130.                     row2[(i*3)+x][broj]=true;
  131.                     col2[(j*3)+y][broj]=true;
  132.                     sqr2[(i*3)+j+1][broj]=true;
  133.                     g1=(i*3)+x;
  134.                     g2=(j*3)+y;
  135.                     g3=(i*3)+j+1;
  136.                    goto onaka;
  137.               }  else
  138.           if (p4!=0){
  139.                        
  140.              
  141.                      a2[(i*3)+x][(j*3)+y]=broj;
  142.                     row2[(i*3)+x][broj]=true;
  143.                     col2[(j*3)+y][broj]=true;
  144.                     sqr2[(i*3)+j+1][broj]=true;
  145.                     p7=(i*3)+x;
  146.                     p8=(j*3)+y;
  147.                     p9=(i*3)+j+1;
  148.                     goto onaka;        
  149.                  
  150.                        
  151.                        } else
  152.           if (p1!=0){
  153.                        
  154.              
  155.                      a2[(i*3)+x][(j*3)+y]=broj;
  156.                     row2[(i*3)+x][broj]=true;
  157.                     col2[(j*3)+y][broj]=true;
  158.                     sqr2[(i*3)+j+1][broj]=true;
  159.                     p4=(i*3)+x;
  160.                     p5=(j*3)+y;
  161.                     p6=(i*3)+j+1;
  162.                     goto onaka;        
  163.                  
  164.                        
  165.                        } else
  166.           {
  167.                
  168.                     a2[(i*3)+x][(j*3)+y]=broj;
  169.                     row2[(i*3)+x][broj]=true;
  170.                     col2[(j*3)+y][broj]=true;
  171.                     sqr2[(i*3)+j+1][broj]=true;
  172.                     p1=(i*3)+x;
  173.                     p2=(j*3)+y;
  174.                     p3=(i*3)+j+1;
  175.                    goto onaka;
  176.             }
  177.          }
  178.     }
  179.     skip2:
  180.          
  181.          
  182.          
  183.          
  184.          
  185.          
  186.           if (p1!=0)
  187.           {
  188.                       for (i=1;i<=9;i++)
  189.   for (j=1;j<=9;j++)
  190.   if (a2[i][j]==0)
  191.   {
  192.          nekoj=0; bla=0;
  193.         for (broj=1;broj<=9;broj++)
  194.         if (row2[i][broj]==false && col2[j][broj]==false && sqr2[(i-1)/3*3+(j-1)/3+1][broj]==false){ nekoj++; bla=broj; }
  195.         if (nekoj==1)
  196.          if (h4!=0)
  197.            {
  198.                      row2[i][bla]=true;
  199.                      col2[j][bla]=true;
  200.                      sqr2[(i-1)/3*3+(j-1)/3+1][bla]=true;
  201.                      a2[i][j]=bla;
  202.                      h7=i;
  203.                      h8=j;
  204.                      h9=(i-1)/3*3+(j-1)/3+1;
  205.                  
  206.                      goto dandam;
  207.         }
  208.         else
  209.         if (h1!=0)
  210.            {
  211.                      row2[i][bla]=true;
  212.                      col2[j][bla]=true;
  213.                      sqr2[(i-1)/3*3+(j-1)/3+1][bla]=true;
  214.                      a2[i][j]=bla;
  215.                      h4=i;
  216.                      h5=j;
  217.                      h6=(i-1)/3*3+(j-1)/3+1;
  218.                  
  219.                      goto skip2;
  220.         }
  221.         else
  222.          
  223.           {
  224.                      row2[i][bla]=true;
  225.                      col2[j][bla]=true;
  226.                      sqr2[(i-1)/3*3+(j-1)/3+1][bla]=true;
  227.                      a2[i][j]=bla;
  228.                      h1=i;
  229.                      h2=j;
  230.                      h3=(i-1)/3*3+(j-1)/3+1;
  231.                
  232.                      goto skip2;
  233.         }
  234.         }
  235.         }        
  236.        
  237.         dandam:
  238.   for (i = 1; i < 10; ++i)
  239.     for (j = 1; j < 10; ++j)
  240.     {
  241.       if (a2[i][j] == 0)
  242.       {
  243.         for (k = 9; k > 0; --k)
  244.         {
  245.           if (!row2[i][k] && !col2[j][k] && !sqr2[(i-1)/3*3+(j-1)/3+1][k])
  246.           {
  247.             a2[i][j] = k;
  248.             row2[i][k] = true;
  249.             col2[j][k] = true;
  250.             sqr2[(i-1)/3*3+(j-1)/3+1][k] = true;
  251.             if (nadole())
  252.               return true;
  253.             else
  254.             {
  255.               a2[i][j] = 0;
  256.               row2[i][k] = false;
  257.               col2[j][k] = false;
  258.               sqr2[(i-1)/3*3+(j-1)/3+1][k] = false;
  259.             }
  260.           }
  261.         }
  262.         if (k == 0){
  263.                         if (h1!=0)
  264.                       {
  265.                                 row2[h1][a2[h1][h2]]=false;
  266.                                 col2[h2][a2[h1][h2]]=false;
  267.                                 sqr2[h3][a2[h1][h2]]=false;
  268.                          
  269.                                 a2[h1][h2]=0;
  270.                    
  271.                                 h1=0;
  272.                                 h2=0;
  273.                                 h3=0;
  274.                       }
  275.                         if (h4!=0)
  276.                       {
  277.                                 row2[h4][a2[h4][h5]]=false;
  278.                                 col2[h5][a2[h4][h5]]=false;
  279.                                 sqr2[h6][a2[h4][h5]]=false;
  280.                        
  281.                                 a2[h4][h5]=0;
  282.                        
  283.                                 h4=0;
  284.                                 h5=0;
  285.                                 h6=0;
  286.                       }
  287.                          if (h7!=0)
  288.                       {
  289.                                 row2[h7][a2[h7][h8]]=false;
  290.                                 col2[h8][a2[h7][h8]]=false;
  291.                                 sqr2[h9][a2[h7][h8]]=false;
  292.                          
  293.                                 a2[h7][h8]=0;
  294.                    
  295.                                 h7=0;
  296.                                 h8=0;
  297.                                 h9=0;
  298.                       }
  299.                         if (b1!=0)
  300.                       {
  301.                                 row2[b1][a2[b1][b2]]=false;
  302.                                 col2[b2][a2[b1][b2]]=false;
  303.                                 sqr2[b3][a2[b1][b2]]=false;
  304.                        
  305.                                 a2[b1][b2]=0;
  306.                                
  307.                                 b1=0;
  308.                                 b2=0;
  309.                                 b3=0;
  310.                       }
  311.                        if (b4!=0)
  312.                       {
  313.                                 row2[b4][a2[b4][b5]]=false;
  314.                                 col2[b5][a2[b4][b5]]=false;
  315.                                 sqr2[b6][a2[b4][b5]]=false;
  316.                        
  317.                                 a2[b4][b5]=0;
  318.                                
  319.                                 b4=0;
  320.                                 b5=0;
  321.                                 b6=0;
  322.                       }
  323.                         if (b7!=0)
  324.                       {
  325.                                 row2[b7][a2[b7][b8]]=false;
  326.                                 col2[b8][a2[b7][b8]]=false;
  327.                                 sqr2[b9][a2[b7][b8]]=false;
  328.                          
  329.                                 a2[b7][b8]=0;
  330.                                
  331.                                 b7=0;
  332.                                 b8=0;
  333.                                 b9=0;
  334.                       }
  335.                        if (p7!=0)
  336.                       {
  337.                        
  338.                                 row2[p7][a2[p7][p8]]=false;
  339.                                 col2[p8][a2[p7][p8]]=false;
  340.                                 sqr2[p9][a2[p7][p8]]=false;
  341.                                 a2[p7][p8]=0;
  342.                                 p7=0;
  343.                                 p8=0;
  344.                                 p9=0;
  345.                      
  346.                       }
  347.                       if (p4!=0)
  348.                       {
  349.                        
  350.                                 row2[p4][a2[p4][p5]]=false;
  351.                                 col2[p5][a2[p4][p5]]=false;
  352.                                 sqr2[p6][a2[p4][p5]]=false;
  353.                                 a2[p4][p5]=0;
  354.                                 p4=0;
  355.                                 p5=0;
  356.                                 p6=0;
  357.                      
  358.                       }
  359.                       if (p1!=0)
  360.                       {
  361.                          
  362.                                 row2[p1][a2[p1][p2]]=false;
  363.                                 col2[p2][a2[p1][p2]]=false;
  364.                                 sqr2[p3][a2[p1][p2]]=false;
  365.                                 a2[p1][p2]=0;
  366.                                 p1=0;
  367.                                 p2=0;
  368.                                 p3=0;
  369.                       }
  370.                         if (g1!=0)
  371.                       {
  372.                        
  373.                                 row2[g1][a2[g1][g2]]=false;
  374.                                 col2[g2][a2[g1][g2]]=false;
  375.                                 sqr2[g3][a2[g1][g2]]=false;
  376.                                 a2[g1][g2]=0;
  377.                                 g1=0;
  378.                                 g2=0;
  379.                                 g3=0;
  380.                       }
  381.                         if (g4!=0)
  382.                       {
  383.                          
  384.                                 row2[g4][a2[g4][g5]]=false;
  385.                                 col2[g5][a2[g4][g5]]=false;
  386.                                 sqr2[g6][a2[g4][g5]]=false;
  387.                                 a2[g4][g5]=0;
  388.                                 g4=0;
  389.                                 g5=0;
  390.                                 g6=0;
  391.                      
  392.                       }
  393.                          if (g7!=0)
  394.                       {
  395.                        
  396.                                 row2[g7][a2[g7][g8]]=false;
  397.                                 col2[g8][a2[g7][g8]]=false;
  398.                                 sqr2[g9][a2[g7][g8]]=false;
  399.                                 a2[g7][g8]=0;
  400.                                 g7=0;
  401.                                 g8=0;
  402.                                 g9=0;
  403.                      
  404.                       }
  405.           return false;}
  406.       }
  407.     }
  408.     return true;
  409. }
  410.  
  411. bool nagore()
  412. {
  413.   int i,j,k,x,y,z,broj,nekoj,p1=0,p2=0,p3=0,p4=0,p5=0,p6=0,p7=0,p8=0,p9=0,g1=0,g2=0,g3=0,g4=0,g5=0,g6=0,g7=0,g8=0,g9=0,b1=0,b2=0,b3=0,b4=0,b5=0,b6=0,b7=0,b8=0,b9=0,bla,h1=0,h2=0,h3=0,h4=0,h5=0,h6=0,h7=0,h8=0,h9=0;
  414. gor:
  415.   for (i=1;i<=9;i++)
  416.   for (j=1;j<=9;j++)
  417.   if (a[i][j]==0)
  418.   {
  419.          nekoj=0; bla=0;
  420.         for (broj=1;broj<=9;broj++)
  421.         if (row[i][broj]==false && col[j][broj]==false && sqr[(i-1)/3*3+(j-1)/3+1][broj]==false){ nekoj++; bla=broj; }
  422.         if (nekoj==1)
  423.         if (b4!=0)
  424.          {
  425.                      row[i][bla]=true;
  426.                      col[j][bla]=true;
  427.                      sqr[(i-1)/3*3+(j-1)/3+1][bla]=true;
  428.                      a[i][j]=bla;
  429.                      b7=i;
  430.                      b8=j;
  431.                      b9=(i-1)/3*3+(j-1)/3+1;
  432.                
  433.                      goto onak;
  434.         } else
  435.         if (b1!=0)
  436.          {
  437.                      row[i][bla]=true;
  438.                      col[j][bla]=true;
  439.                      sqr[(i-1)/3*3+(j-1)/3+1][bla]=true;
  440.                      a[i][j]=bla;
  441.                      b4=i;
  442.                      b5=j;
  443.                      b6=(i-1)/3*3+(j-1)/3+1;
  444.              
  445.                      goto gor;
  446.         } else
  447.         {
  448.                      row[i][bla]=true;
  449.                      col[j][bla]=true;
  450.                      sqr[(i-1)/3*3+(j-1)/3+1][bla]=true;
  451.                      a[i][j]=bla;
  452.                      b1=i;
  453.                      b2=j;
  454.                      b3=(i-1)/3*3+(j-1)/3+1;
  455.                
  456.                      goto gor;
  457.         }
  458. }
  459.                      
  460.  
  461.   onak:
  462.  
  463.     for (broj=1;broj<=9;broj++)
  464.   {
  465.         for (i=0;i<=2;i++)
  466.         for (j=0;j<=2;j++)
  467.         {
  468.             nekoj=0;
  469.             if (sqr[i*3+(j+1)][broj]) continue;
  470.             for (x=1;x<=3;x++)
  471.             for (y=1;y<=3;y++)
  472.             if (a[(i*3)+x][(j*3)+y]!=0 || (row[(i*3)+x][broj]) || (col[(j*3)+y][broj])) nekoj++;
  473.           if (nekoj==8)
  474.           for (x=1;x<=3;x++)
  475.           for (y=1;y<=3;y++)
  476.           if (a[(i*3)+x][(j*3)+y]==0 && !row[(i*3)+x][broj] && !col[(j*3)+y][broj])
  477.            if (g4!=0){
  478.                        
  479.                
  480.                      a[(i*3)+x][(j*3)+y]=broj;
  481.                     row[(i*3)+x][broj]=true;
  482.                     col[(j*3)+y][broj]=true;
  483.                     sqr[(i*3)+j+1][broj]=true;
  484.                     g7=(i*3)+x;
  485.                     g8=(j*3)+y;
  486.                     g9=(i*3)+j+1;
  487.                     goto skip;        
  488.                  
  489.                        
  490.                        } else
  491.              if (g1!=0){
  492.                        
  493.        
  494.                      a[(i*3)+x][(j*3)+y]=broj;
  495.                     row[(i*3)+x][broj]=true;
  496.                     col[(j*3)+y][broj]=true;
  497.                     sqr[(i*3)+j+1][broj]=true;
  498.                     g4=(i*3)+x;
  499.                     g5=(j*3)+y;
  500.                     g6=(i*3)+j+1;
  501.                     goto onak;        
  502.                  
  503.                        
  504.                        } else
  505.              if (p7!=0)
  506.              {
  507.                
  508.                     a[(i*3)+x][(j*3)+y]=broj;
  509.                     row[(i*3)+x][broj]=true;
  510.                     col[(j*3)+y][broj]=true;
  511.                     sqr[(i*3)+j+1][broj]=true;
  512.                     g1=(i*3)+x;
  513.                     g2=(j*3)+y;
  514.                     g3=(i*3)+j+1;
  515.                    goto onak;
  516.               }  else
  517.           if (p4!=0){
  518.                        
  519.              
  520.                      a[(i*3)+x][(j*3)+y]=broj;
  521.                     row[(i*3)+x][broj]=true;
  522.                     col[(j*3)+y][broj]=true;
  523.                     sqr[(i*3)+j+1][broj]=true;
  524.                     p7=(i*3)+x;
  525.                     p8=(j*3)+y;
  526.                     p9=(i*3)+j+1;
  527.                     goto onak;        
  528.                  
  529.                        
  530.                        } else
  531.           if (p1!=0){
  532.                        
  533.              
  534.                      a[(i*3)+x][(j*3)+y]=broj;
  535.                     row[(i*3)+x][broj]=true;
  536.                     col[(j*3)+y][broj]=true;
  537.                     sqr[(i*3)+j+1][broj]=true;
  538.                     p4=(i*3)+x;
  539.                     p5=(j*3)+y;
  540.                     p6=(i*3)+j+1;
  541.                     goto onak;        
  542.                  
  543.                        
  544.                        } else
  545.           {
  546.              
  547.                     a[(i*3)+x][(j*3)+y]=broj;
  548.                     row[(i*3)+x][broj]=true;
  549.                     col[(j*3)+y][broj]=true;
  550.                     sqr[(i*3)+j+1][broj]=true;
  551.                     p1=(i*3)+x;
  552.                     p2=(j*3)+y;
  553.                     p3=(i*3)+j+1;
  554.                     goto onak;
  555.             }
  556.          }
  557.     }
  558.     skip:
  559.          
  560.          
  561.          
  562.          
  563.            if (p1!=0)
  564.           {
  565.                       for (i=1;i<=9;i++)
  566.   for (j=1;j<=9;j++)
  567.   if (a[i][j]==0)
  568.   {
  569.          nekoj=0; bla=0;
  570.         for (broj=1;broj<=9;broj++)
  571.         if (row[i][broj]==false && col[j][broj]==false && sqr[(i-1)/3*3+(j-1)/3+1][broj]==false){ nekoj++; bla=broj; }
  572.         if (nekoj==1)
  573.           if (h1!=0)
  574.            {
  575.                      row[i][bla]=true;
  576.                      col[j][bla]=true;
  577.                      sqr[(i-1)/3*3+(j-1)/3+1][bla]=true;
  578.                      a[i][j]=bla;
  579.                      h4=i;
  580.                      h5=j;
  581.                      h6=(i-1)/3*3+(j-1)/3+1;
  582.                  
  583.                      goto danda;
  584.         }
  585.         else
  586.          
  587.           {
  588.                      row[i][bla]=true;
  589.                      col[j][bla]=true;
  590.                      sqr[(i-1)/3*3+(j-1)/3+1][bla]=true;
  591.                      a[i][j]=bla;
  592.                      h1=i;
  593.                      h2=j;
  594.                      h3=(i-1)/3*3+(j-1)/3+1;
  595.                  
  596.                      goto skip;
  597.         }
  598.         }
  599.         }        
  600.        
  601.        
  602.         danda:
  603.   for (i = 1; i < 10; ++i)
  604.     for (j = 1; j < 10; ++j)
  605.     {
  606.       if (a[i][j] == 0)
  607.       {
  608.         for (k = 1; k < 10; ++k)
  609.         {
  610.           if (!row[i][k] && !col[j][k] && !sqr[(i-1)/3*3+(j-1)/3+1][k])
  611.           {
  612.             a[i][j] = k;
  613.             row[i][k] = true;
  614.             col[j][k] = true;
  615.             sqr[(i-1)/3*3+(j-1)/3+1][k] = true;
  616.             if (nagore())
  617.               return true;
  618.             else
  619.             {
  620.               a[i][j] = 0;
  621.               row[i][k] = false;
  622.               col[j][k] = false;
  623.               sqr[(i-1)/3*3+(j-1)/3+1][k] = false;
  624.             }
  625.           }
  626.         }
  627.         if (k == 10){
  628.                         if (h1!=0)
  629.                       {
  630.                                 row[h1][a[h1][h2]]=false;
  631.                                 col[h2][a[h1][h2]]=false;
  632.                                 sqr[h3][a[h1][h2]]=false;
  633.                            
  634.                                 a[h1][h2]=0;
  635.                        
  636.                                 h1=0;
  637.                                 h2=0;
  638.                                 h3=0;
  639.                       }
  640.                           if (h4!=0)
  641.                       {
  642.                                 row[h4][a[h4][h5]]=false;
  643.                                 col[h5][a[h4][h5]]=false;
  644.                                 sqr[h6][a[h4][h5]]=false;
  645.                            
  646.                                 a[h4][h5]=0;
  647.                        
  648.                                 h4=0;
  649.                                 h5=0;
  650.                                 h6=0;
  651.                       }
  652.                       if (b1!=0)
  653.                       {
  654.                                 row[b1][a[b1][b2]]=false;
  655.                                 col[b2][a[b1][b2]]=false;
  656.                                
  657.                                 sqr[b3][a[b1][b2]]=false;
  658.                
  659.                                 a[b1][b2]=0;
  660.                                
  661.                                 b1=0;
  662.                                 b2=0;
  663.                                 b3=0;
  664.                       }   if (b4!=0)
  665.                       {
  666.                                 row[b4][a[b4][b5]]=false;
  667.                                 col[b5][a[b4][b5]]=false;
  668.                                 sqr[b6][a[b4][b5]]=false;
  669.                  
  670.                                 a[b4][b5]=0;
  671.                                
  672.                                 b4=0;
  673.                                 b5=0;
  674.                                 b6=0;
  675.                       }
  676.                          if (b7!=0)
  677.                       {
  678.                                 row[b7][a[b7][b8]]=false;
  679.                                 col[b8][a[b7][b8]]=false;
  680.                                 sqr[b9][a[b7][b8]]=false;
  681.              
  682.                                 a[b7][b8]=0;
  683.                                
  684.                                 b7=0;
  685.                                 b8=0;
  686.                                 b9=0;
  687.                       }
  688.                         if (g7!=0)
  689.                       {
  690.                  
  691.                                 row[g7][a[g7][g8]]=false;
  692.                                 col[g8][a[g7][g8]]=false;
  693.                                 sqr[g9][a[g7][g8]]=false;
  694.                                 a[g7][g8]=0;
  695.                                 g7=0;
  696.                                 g8=0;
  697.                                 g9=0;
  698.                      
  699.                       }
  700.                        if (p7!=0)
  701.                       {
  702.                  
  703.                                 row[p7][a[p7][p8]]=false;
  704.                                 col[p8][a[p7][p8]]=false;
  705.                                 sqr[p9][a[p7][p8]]=false;
  706.                                 a[p7][p8]=0;
  707.                                 p7=0;
  708.                                 p8=0;
  709.                                 p9=0;
  710.                      
  711.                       }
  712.                       if (p4!=0)
  713.                       {
  714.                  
  715.                                 row[p4][a[p4][p5]]=false;
  716.                                 col[p5][a[p4][p5]]=false;
  717.                                 sqr[p6][a[p4][p5]]=false;
  718.                                 a[p4][p5]=0;
  719.                                 p4=0;
  720.                                 p5=0;
  721.                                 p6=0;
  722.                      
  723.                       }
  724.                       if (p1!=0)
  725.                       {
  726.                    
  727.                                 row[p1][a[p1][p2]]=false;
  728.                                 col[p2][a[p1][p2]]=false;
  729.                                 sqr[p3][a[p1][p2]]=false;
  730.                                 a[p1][p2]=0;
  731.                                 p1=0;
  732.                                 p2=0;
  733.                                 p3=0;
  734.                       }
  735.                         if (g1!=0)
  736.                       {
  737.                      
  738.                                 row[g1][a[g1][g2]]=false;
  739.                                 col[g2][a[g1][g2]]=false;
  740.                                 sqr[g3][a[g1][g2]]=false;
  741.                                 a[g1][g2]=0;
  742.                                 g1=0;
  743.                                 g2=0;
  744.                                 g3=0;
  745.                       }
  746.                        if (g4!=0)
  747.                       {
  748.              
  749.                                 row[g4][a[g4][g5]]=false;
  750.                                 col[g5][a[g4][g5]]=false;
  751.                                 sqr[g6][a[g4][g5]]=false;
  752.                                 a[g4][g5]=0;
  753.                                 g4=0;
  754.                                 g5=0;
  755.                                 g6=0;
  756.                      
  757.                       }
  758.           return false;}
  759.       }
  760.     }
  761.     return true;
  762. }
  763.  
  764. int main()
  765. {
  766.  
  767.  
  768.   ok=true;
  769.  
  770.     int i,j,x,y,z,broj,nekoj;
  771.  
  772.    
  773.     for (i = 0; i < 9; ++i)
  774.       cin >> c[i];
  775.     for (i = 1; i < 10; ++i)
  776.     {
  777.       for (j = 1; j < 10; ++j)
  778.       {
  779.           if (c[i-1][j-1]=='.')  {a2[i][j]=0; a[i][j]=0;} else
  780.       { a[i][j] = c[i-1][j-1] - '0';  a2[i][j] = c[i-1][j-1] - '0'; }
  781.         row[i][a[i][j]] = true;
  782.         col[j][a[i][j]] = true;
  783.         sqr[(i-1)/3*3+(j-1)/3+1][a[i][j]] = true;
  784.         row2[i][a[i][j]] = true;
  785.         col2[j][a[i][j]] = true;
  786.         sqr2[(i-1)/3*3+(j-1)/3+1][a[i][j]] = true;
  787.       }
  788.     }
  789.  
  790.  
  791.  
  792.  
  793.   z:
  794.   for (broj=1;broj<=9;broj++)
  795.   {
  796.         for (i=0;i<=2;i++)
  797.         for (j=0;j<=2;j++)
  798.         {
  799.             nekoj=0;
  800.             if (sqr[i*3+(j+1)][broj]) continue;
  801.             for (x=1;x<=3;x++)
  802.             for (y=1;y<=3;y++)
  803.             if (a[(i*3)+x][(j*3)+y]!=0 || (row[(i*3)+x][broj]) || (col[(j*3)+y][broj])) nekoj++;
  804.           if (nekoj==8)
  805.           for (x=1;x<=3;x++)
  806.           for (y=1;y<=3;y++)
  807.           if (a[(i*3)+x][(j*3)+y]==0 && !row[(i*3)+x][broj] && !col[(j*3)+y][broj])
  808.           {
  809.                   //  cout<<(i*3)+x<<(j*3)+y<<broj<<endl;
  810.                     a[(i*3)+x][(j*3)+y]=broj;
  811.                     row[(i*3)+x][broj]=true;
  812.                     col[(j*3)+y][broj]=true;
  813.                     sqr[(i*3)+j+1][broj]=true;
  814.                     goto z;
  815.             }
  816.          }
  817.     }
  818.    
  819.     for (i=1;i<=9;i++)
  820.     for (j=1;j<=9;j++)
  821.     {
  822.         a2[i][j]=a[i][j];
  823.         row2[i][j]=row[i][j];
  824.         col2[i][j]=col[i][j];
  825.         sqr2[i][j]=sqr[i][j];
  826.     }          
  827.  
  828.  
  829.     if (!ok) cout<<"IMPOSSIBLE" ;  else
  830.     {
  831.       nagore();
  832.         for (int i = 1; i < 10; ++i)
  833.       for (int j = 1; j < 10; ++j)
  834.       if (a[i][j]==0) {  cout<<"IMPOSSIBLE" ; goto top; } else
  835.       {
  836.     for (i = 1; i < 10; ++i)
  837.     {
  838.       for (j = 1; j < 10; ++j)
  839.         cout << a[i][j];
  840.       cout << endl;
  841.     }
  842.  
  843.  
  844.      cout << endl;    
  845.      
  846.   nadole();
  847.     for (int i = 1; i < 10; ++i)
  848.       for (int j = 1; j < 10; ++j)
  849.       if (a[i][j]!=a2[i][j])
  850.       {
  851.                                     for (i = 1; i < 10; ++i)
  852.                                {
  853.                              for (j = 1; j < 10; ++j)
  854.                            cout << a2[i][j];
  855.                              cout << endl;
  856.                                }
  857.                           break;
  858.            }
  859. }}
  860. top://  system ("PAUSE");
  861.  
  862.   return 0;
  863. }
Add Comment
Please, Sign In to add comment