C语言怎么实现解决一个数独啊~~菜鸟求C语言大神给代码和思路><~~好的给追加分!!

C语言怎么实现解决一个数独...我的思路是先定义一个数组然后81个循环改变每个变量的值==当然我觉得这个执行肯定太慢……跪求解~... C语言怎么实现解决一个数独...
我的思路是先定义一个数组
然后81个循环改变每个变量的值= =
当然我觉得这个执行肯定太慢……跪求解~
展开
 我来答
南方小智
2011-02-15 · TA获得超过836个赞
知道小有建树答主
回答量:328
采纳率:0%
帮助的人:258万
展开全部
这是用递归方法写的代码
摘自http://blog.sina.com.cn/s/blog_61c5b01f0100nrta.html
我测试过一些案例
初始数据必须是正确的,一些极端情况会卡很久才有结果
一般能够很快给出所有解
#include<stdio.h>

int result=0; //结果数

int main()
{
int a[9][9];
void Sudoku(int a[9][9],int n);
printf("请输入数独中的原始数据,没有数据的用0代替。\n");
for(int i=0;i<9;i++)
{
printf("请输入第%d行的9个数:",i+1);
for(int j=0;j<9;j++)
scanf("%d",&a[i][j]);
}
printf("数独的解为:\n\n");
Sudoku(a,0);
if(result==0)
printf("此数独无解!");
return 0;
}

//输出可行的解
void print(int a[9][9])
{
result++;
printf("第%d个填法为:\n",result);
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
printf("%d ",a[i][j]);
if((j==2)||(j==5))
printf(" ");
}
printf("\n");
if((i==2)||(i==5))
printf("\n");
}
printf("\n");
}

//判断是否可以将第i行、第j列的数设为k
bool check(int a[9][9],int i,int j,int k)
{
int m,n;
//判断行
for(n=0;n<9;n++)
{
if(a[i][n] == k)
return false;
}
//判断列
for(m=0;m<9;m++)
{
if(a[m][j] == k)
return false;
}
//判断所在小九宫格
int t1=(i/3)*3,t2=(j/3)*3;
for(m=t1;m<t1+3;m++)
{
for(n=t2;n<t2+3;n++)
{
if(a[m][n] == k)
return false;
}
}
//可行,返回true
return true;
}

//数独求解函数
void Sudoku(int a[9][9],int n)
{
int temp[9][9];
int i,j;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
temp[i][j]=a[i][j];
}
i=n/9; j=n%9; //求出第n个数的行数和列数
if(a[i][j] != 0) //已经有原始数据
{
if(n == 80) //是最后一个格子,输出可行解
print(temp);
else //不是最后一个格子,求下一个格子
Sudoku(temp,n+1);
}
else //没有数据
{
for(int k=1;k<=9;k++)
{
bool flag=check(temp,i,j,k);
if(flag) //第i行、第j列可以是k
{
temp[i][j]=k; //设为k
if(n == 80)
print(temp);
else
Sudoku(temp,n+1);
temp[i][j]=0; //恢复为0,判断下一个k
}
}
}
}
regret4hxp2
2011-02-13 · TA获得超过682个赞
知道小有建树答主
回答量:479
采纳率:100%
帮助的人:248万
展开全部
数独的排列是有规律的。
你去搜一下数独的排列规律
有了这个规律, 根本不用穷举法。
直接一个个数填充到该排的位置即可。!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
赧卿08x
2012-04-20 · TA获得超过136个赞
知道答主
回答量:130
采纳率:0%
帮助的人:111万
展开全部
不慢,我是思路也大概是这样的,一个数一个数的试,一般1万步循环,加循环内的一个函数大概每次执行1000步不到的样子,几乎是秒杀。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2011-02-14 · TA获得超过230个赞
知道小有建树答主
回答量:107
采纳率:0%
帮助的人:98.8万
展开全部
对不起,数独的解法只有搜索。LZ可以查阅一下NOIP2009第四题靶形数独的解题报告
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
丝缘天下
2011-02-13
知道答主
回答量:13
采纳率:0%
帮助的人:10万
展开全部
网上这样的代码多了是,搜搜就行了嘛~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式