数独问题
来源:互联网 发布:淘宝店铺修改退货地址 编辑:程序博客网 时间:2024/05/22 15:56
数独游戏规则
在9阶方阵中,包含了81个小格(九列九行),其中又再分成九个小正方形(称为宫),每宫有九小格。
游戏刚开始时,盘面上有些小格已经填了数字(称为初盘),游戏者要在空白的小格中填入1到9的数字,
使得最后每行、每列、每宫都不出现重复的数字,而且每一个游戏都只有一个唯一的解答(称为终盘)。
输入:
一个9*9的矩阵,0表示该位置是空白。
输出:
一个9*9的矩阵,格式与输入类似。
输入样例:
900050060020070100300102040703800529000345000516009403050208006007090010030010004
输出样例:
971453268428976135365182947743861529892345671516729483154238796687594312239617854
#include<iostream>
using namespace std;int a[9][9];
char ab[9][9];
void init();
void search(int m);
void output();
int canplace(int row,int col,int num);
int main()
{
init();
search(0);
return 0;
}
void init()
{
int i,j;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
cin>>ab[i][j];
a[i][j]=ab[i][j]-'0';
}
}
}
void search(int m)
{
int row,col,i;
if(m==81)
{
output();
}
else
{
row=m/9;
col=m%9;
if(a[row][col]!=0)
{
search(m+1);
}
else if(a[row][col]==0)
{
for(int i=1;i<=9;i++)
{
if(canplace(row,col,i))
{
a[row][col]=i;
search(m+1);
a[row][col]=0;
}
}
}
}
}
int canplace(int row,int col,int num)
{
int i,j;
int flag=1;
for(i=0;i<9;i++)
{
if(a[row][i]==num||a[i][col]==num)
{
flag=0;
break;
}
}
if(flag==1)
{
for(i=(row/3)*3;i<=(row/3)*3+2;i++)
{
for(j=(col/3)*3;j<=(col/3)*3+2;j++)
{
if(a[i][j]==num)
{
flag=0;
break;
}
}
if(flag==0)
{
break;
}
}
}
return flag;
}
void output()
{
int i,j;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
if(j==8)
{
cout<<a[i][j]<<endl;
}
else
{
cout<<a[i][j];
}
}
}
}
阅读全文
0 0
- 数独问题思考
- 数独问题
- cs101,数独问题
- 数独问题
- 4.9 数独问题
- 数独问题
- hdu - 数独问题
- 数独问题
- 算法 数独问题
- 数独问题
- 数独问题
- 数独问题
- 数独问题
- skudo数独问题
- 数独问题
- 数独问题
- 数独问题
- 数独问题
- 人的感知和思维
- 系统应用被杀死?android:persistent="true"帮你走向光明大道
- 原生Ajax和Jquery的Ajax使用示例
- 添加依赖报错
- 如何在Spyder中运行spark
- 数独问题
- webView的简单实际使用
- spring-data-redis scan 中的cursor关闭
- java安全沙箱(四)之安全管理器及Java API
- 高性能MYSQL--第一章
- sort-cut-wc用法详解
- POJ 2356 Find a multiple【鸽巢原理】
- android jni中将大数据回调到java层的时候用法,比如视频流,音频流等,图片流等 比如我用ffmpeg解码好视频流,想送到java层使用opengGL进行显示,opencv进行人脸识别等等
- 求最大子列和(时间复杂度分别为O(n3) O(n2) O(n))