C语言——求解数独(深搜)
来源:互联网 发布:pp手机助手mac版 编辑:程序博客网 时间:2024/06/07 13:11
数独游戏
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
数独游戏规则
在9阶方阵中,包含了81个小格(九列九行),其中又再分成九个小正方形(称为宫),每宫有九小格。
游戏刚开始时,盘面上有些小格已经填了数字(称为初盘),游戏者要在空白的小格中填入1到9的数字,
使得最后每行、每列、每宫都不出现重复的数字,而且每一个游戏都只有一个唯一的解答(称为终盘)。
输入:
一个9*9的矩阵,0表示该位置是空白。
输出:
一个9*9的矩阵,格式与输入类似。
输入样例:
900050060020070100300102040703800529000345000516009403050208006007090010030010004
输出样例:
971453268428976135365182947743861529892345671516729483154238796687594312239617854
答案如下:
#include<stdio.h>
char shudu[9][9];
int a[9][9];
int m;
void search(int m);
void output();
int canplace(int m,int n);
int main()
{
int i,j;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
scanf("%c",&shudu[i][j]);
a[i][j]=shudu[i][j]-'0';
}
if(i!=8) scanf("\n");
}
search(0);
}
void search(int m)
{
int i;
if(m==81)
{
output();
}
else if(a[m/9][m%9]!=0)
{
search(m+1);
}
else if(a[m/9][m%9]==0)
{
for(i=1;i<=9;i++)
{
if(canplace(m,i))//尽管m是全局变量,仍需传到canplace里
{
a[m/9][m%9]=i;
search(m+1);
a[m/9][m%9]=0;
}
}
}
}
int canplace(int m,int n)
{
//一个函数不能有多处返回值。。真是蠢哭了
int k,j,flag=1;
for(j=0;j<9;j++)
{
if(n==a[m/9][j])
{
flag=0;
break;
}
}
if(flag==1)
{
for(j=0;j<9;j++)
{
if(n==a[j][m%9])
{
flag=0;
break;
}
}
}
if(flag==1)
{
for(j=((m/9)/3)*3;j<((m/9)/3)*3+3;j++)
{
for(k=((m%9)/3)*3;k<((m%9)/3)*3+3;k++)
{
if(n==a[j][k])
{
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++)
{
printf("%d",a[i][j]);
}
printf("\n");
}
}
- C语言——求解数独(深搜)
- 数独 递归求解(C语言)
- 经典数独游戏+数独求解器—纯C语言实现
- 数独求解(c语言以及python)
- c语言编写求解数独
- C语言数独游戏求解
- 数独求解(深搜)
- 数独求解(回溯)
- 数独 C语言 解数独
- 数独C语言解法
- C语言 数独 递归
- 算法实践——舞蹈链(Dancing Links)算法求解数独
- 数独(Sudoku)求解程序
- 数独求解(C++代码)
- java求解数独(递归)
- 数独游戏求解
- 求解数独
- 数独求解算法
- Volley源码解析
- day 21 Linux软件包安装与卸载
- 深度:车联网制造商该从物联网“老司机”那里吸取哪些教训
- 想成为数据科学家?你得先读读这篇文章
- 解决linux QT不能切换中文输入法
- C语言——求解数独(深搜)
- Win10下VS2015(WDK10)驱动开发环境配置
- 没听清楚出处的题
- 【Spring】 (11)组合注解和元注解
- clisp 记录:3. 求值和编译
- IN 查询时出现ORA-01795:列表中的最大表达式数为1000解决方法
- 【第七届蓝桥杯】冰雹数
- go命令
- android studio 设置控制台字体大小