求解九位宫游戏的C语言核心代码

 
这是一个求解九位宫游戏的C语言核心代码:
/*查找空格*/
int find(int tab[9][9],int i,int j){
   int l,k,count=1;
   for(l=i;l<9;l++)
     for(k=j;k<9;k++)
        if(tab[l][k]==0){
          backdata(tab,l,k,count);
     }/*end if1 */
   return tab;
}
/*回溯*/
int backdata(int tab[9][9],int i,int j,int count){
     int l,k,mark = 0;
        mark = solution(tab,i,j,count);
        if(mark == 0){
         low[topl] = i;
         topl++;
         low[topr] = j;
         topr++;
         find(tab,i,j);
        }
        if(mark == 1){
          l = low[topl];
          topl--;
          k = row[topr];
          topr--;
          count = tab[l][k];
          backdata(tab,l,k,count);
        }
}
/*为空格寻找合适的数字*/
int solution(int tab[9][9],int low,int row,int count){
   int m1,m2,i,mark;
   for(i=count;i<=9;i++){
   m1 = decideRL(tab,i,low,row);
   m2 = decideCHECK(tab,i,low,row);
   if((m1 == 0)&&(m2 == 0)){
        tab[low][row] = i;
        mark = 0;
     }
     else mark = 1;
   }
   return mark;
}
/*判断横和列*/
int decideRL(int tab[9][9],int value,int low,int row){
   int j,mark=0;
   for(j=0;j<9;j++)
        if((tab[low][j]== value)||(tab[j][row])==value)
        mark = 1;
   return mark;
}
/* 判断小方正  */
int decideCHECK(int tab[9][9],int value,int low,int row){
   int i,j,L,R,ls,ln,rs,rn,mark=0;
   L = low/3;
   R = row/3;
   if(L-1<=0)
   ls = 0;
   ls = L*3;
   ln = (L+1)*3-1;
   if(R-1<=0)
   rs = 0;
   rs = R*3;
   rn = (R+1)*3-1;
   for(i=ls;i<=ln;i++)
     for(j=rs;j<=rn;j++)
       if(tab [j] == value)
          mark = 1;
   return mark;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值