数独游戏



描述:

 

数独游戏规则
在9阶方阵中,包含了81个小格(九列九行),其中又再分成九个小正方形(称为宫),每宫有九小格。
游戏刚开始时,盘面上有些小格已经填了数字(称为初盘),游戏者要在空白的小格中填入1到9的数字,
使得最后每行、每列、每宫都不出现重复的数字,而且每一个游戏都只有一个唯一的解答(称为终盘)。

输入:

 

一个9*9的矩阵,0表示该位置是空白。

输出:

 

一个9*9的矩阵,格式与输入类似。

输入样例:

 

 

900050060 020070100 300102040 703800529 000345000 516009403 050208006 007090010 030010004

 

输出样例:

 

 

971453268 428976135 365182947 743861529 892345671 516729483 154238796 687594312 239617854

#include<iostream>

using namespace std;

int a[9][9]; int num[9];

int complace(int c,int d); void shuru(); void search(int m); void output();

int main() {  shuru();  search(0);  return 0;

} void shuru() {  int i,j;  for(i=0;i<9;i++)  {   cin>>num[i];  }  for(i=0;i<9;i++)  {   for(j=8;j>=0;j--)   {    a[i][j]=num[i]%10;    num[i]=num[i]/10;    }  } } void search(int m) {  int i;  if(m==81)  {   output();

 }  else if(a[m/9][m%9]!=0)  {   search(m+1);  }  else  {   for(i=1;i<=9;i++)   {    if(complace(m,i)==1)    {     a[m/9][m%9]=i;     search(m+1);    }

  }    a[m/9][m%9]=0;  } } int complace(int c,int d) {  int flag;  int i,j;    flag=1;    for(i=0;i<9;i++)  {   if(a[i][c%9]==d)   {    flag=0;    break;   }

 }  for(i=0;i<9;i++)  {   if(a[c/9][i]==d)   {    flag=0;    break;   }  }  for(i=(c/9)/3*3;i<(c/9)/3*3+3;i++)  {   for(j=(c%9)/3*3;j<(c%9)/3*3+3;j++)    if(a[i][j]==d)    {     flag=0;        return 0;    }  }  return (flag);

} void output() {  int i,j;  for(i=0;i<9;i++)  {   for(j=0;j<9;j++)   {    cout<<a[i][j];   }   cout<<endl;  }   }

      

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值