如何用C解9*9数独,求代码,高手勿喷。

要用C写,而不是C++输入如输出如C++参考代码//weizengke#include<iostream.h>#include<time.h>st... 要用C写,而不是C++输入如输出如C++参考代码//weizengke#include <iostream.h>#include<time.h>static int pu[9][9];int isvalid(const int i, const int j)//验证函数当期i,j坐标是否符合游戏规则,不重复{const int n = pu[i][j];const static int query[] = {0, 0, 0, 3, 3, 3, 6, 6, 6};int t, u;for (t = 0; t < 9; t++)if (t != i && pu[t][j] == n || t != j && pu[i][t] == n)//0-9的数字,每行每列都不能重复return 0;for (t = query[i]; t < query[i] + 3; t++) //9个宫的3×3里也不能重复for (u = query[j]; u < query[j] + 3; u++)if ((t != i || u != j) && pu[t][u] == n)return 0; return 1;}void output(void)//输入函数{static int n;cout << "Solution " << ++n << ":" <<endl;for (int i = 0; i < 9; i++) {for (int j = 0; j < 9; j++)cout<< pu[i][j] << " ";cout << endl;}cout << endl;}void Try(const int n)//核心函数,回溯算法{if (n == 81) {//是否已经是最后一个格子output();return;}const int i = n / 9, j = n % 9;if (pu[i][j] != 0) {//如果当前格子不需要填数字,就跳到下一个格子Try(n + 1);return;}for (int k = 0; k < 9; k++) {pu[i][j]++;//当前格子进行尝试所有解if (isvalid(i, j))Try(n + 1);//验证通过,就继续下一个}pu[i][j] = 0; //如果上面的单元无解,就回溯}int main(void){int i,j;for (i=0;i<9;i++)for (j=0;j<9;j++)cin>>pu[i][j];long start=clock();Try(0);long end=clock();cout<<"计算一共花了"<<(double)(end-start)<<"毫秒"<<endl;return 0;} 展开
 我来答
touzi3364
2012-07-05
知道答主
回答量:67
采纳率:0%
帮助的人:36万
展开全部
int i, j, n=3; int col = 1, line = 0; a[line][col] = 1"%d ", a[i][j]); printf("\\n"); } return 0; } 我有解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式