小算法练习,Sudoku(POJ2676数字游戏

来源:互联网 发布:c 和c语言有什么区别 编辑:程序博客网 时间:2024/05/18 00:09

  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");
    } 
}

 

原创粉丝点击