小算法練習,Sudoku(POJ2676數字遊戲

  SudokuPOJ2676)是一種簡單的數字遊戲,一個9×9的正方形表格被分成93×3的小正方形表格,在表格的某些單元格中,已填有數字19中的一個。遊戲的任務是,在表格每一個空白單元格里填入數字19中的一個,使得9×9正方形表格的每一行和每一列以及93×3小正方形表格中,數字19都出現且僅出現一次。

你的任務是,編程求出給定Sudoku遊戲的一種填法。

int array[9][9];
int num=0;
int pan(int i,int j,int t)
{
    int a,b;
    int i1,j1; 

     if(array[i][j]!=0)//原位置上有數
    {
        if(j==8&&i==8)
            return 1;
        if(j==8&&i<8)
           {
              for(a=1;a<=9;a++)
                if(pan(i+1,0,a)==1)
                   return 1;
           }
        else
         {
      for(a=1;a<=9;a++)
        if(pan(i,j+1,a)==1)
         return 1;
         }
    }
 else
 {     
          for(a=0;a<9;a++)//看大行,大列中是否有數與t重合的
             if(t==array[i][a]||t==array[a][j])
               return 0;
    //小矩陣中有沒有與t重合的
          {
            i1=i/3;
            i1=i1*3;
            j1=j/3;
            j1=j1*3;
            for(a=i1;a<i1+3;a++)
                for(b=j1;b<j1+3;b++)
                     {
                        if(array[a][b]==t)
                          return 0;
                      }
           }
    //t暫時可以添入該位置
          array[i][j]=t;
          if(j==8&&i==8)
              return 1;//最後一個數了,成功添數
          if(j==8&&i<8)
           {
                for(a=1;a<=9;a++)
                  if(pan(i+1,0,a)==1)
                   return 1;
               if(a==10)
                 {
                  array[i][j]=0;
                  return 0;
                  }
            }
        else 
          { 
               for(a=1;a<=9;a++)
                 if(pan(i,j+1,a)==1)
                   return 1;
              if(a==10)
                  {
                 array[i][j]=0;
                 return 0;
               }
             } 
   
 }
}
void main()
{
   int i=0,j=0,t;
   for(i=0;i<9;i++)
   for(j=0;j<9;j++)
     array[i][j]=0;//初始化,全爲0 ,此簡化了,在原來方格中沒有添數字

   for(t=1;t<=9;t++)//添第一個數
     if(pan(0,0,t)==1)
      break;
   for(i=0;i<9;i++)
    {

        for(j=0;j<9;j++)
           printf("%4d",array[i][j]);
         printf("\n");
    } 
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章