问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言数独求解

发布网友 发布时间:2022-08-22 23:45

我来回答

1个回答

热心网友 时间:2024-11-23 19:43

#include

/*数字0表示该位置为空,待填入数字
{0,0,4,6,0,2,0,9,1},
{2,1,0,9,8,4,0,5,6},
{9,0,0,0,7,1,4,2,0},
{1,2,5,0,6,0,3,4,7},
{4,7,6,0,0,0,9,8,5},
{8,3,9,0,4,0,1,6,2},
{0,9,1,2,5,0,0,0,4},
{5,8,0,4,1,6,0,3,9},
{6,4,0,3,0,7,5,0,0}};
*/

int data[9][9] = {
{0,7,0,2,6,0,9,0,0},
{3,0,0,0,0,8,0,0,7},
{0,9,0,0,5,7,0,0,0},
{5,0,0,0,0,0,0,7,0},
{0,4,7,3,1,2,8,5,0},
{0,8,0,0,0,0,0,0,1},
{0,0,0,8,2,0,0,4,0},
{7,0,0,6,0,0,0,0,2},
{0,0,4,0,3,9,0,8,0}};

void input()
{
int i,j;
for(i = 0;i < 9;i++)
for(j = 0;j < 9;j++)
scanf("%d",&data[i][j]);
}

void output()
{
int i,j;
for(i = 0;i < 9;i++)
{
for(j = 0;j < 9;j++)
printf("%d ",data[i][j]);
printf("\n");
}
printf("\n");
}

/*检查num是否可放置在3*3区域是否有冲突*/
int CheckSquare(int line,int col,int num)
{
int i = (line / 3) * 3;
int j = (col / 3) * 3;
int m,n;
for(m = i;m < i + 3;m++)
for(n = j;n < j + 3;n++)
if((data[m][n] == num) && !(m == line && n == col))
return 0;
return 1;
}

/*检查行冲突*/
int CheckLine(int line,int col,int num)
{
int i = 9;
while(i--)
if((data[line][i] == num) && (i != col))
return 0;
return 1;
}

/*检查列冲突*/
int CheckColumn(int line,int col,int num)
{
int i = 9;
while(i--)
if((data[i][col] == num) && (i != line))
return 0;
return 1;
}

/*检查i行j列是否可放置num*/
int Check(int i,int j,int num)
{
return CheckSquare(i,j,num) && CheckLine(i,j,num) && CheckColumn(i,j,num);
}

/*检查是否完成*/
int IsDone()
{
int i,j;
for(i = 0;i < 9;i++)
for(j = 0;j < 9;j++)
if(!Check(i,j,data[i][j]) || (data[i][j] == 0))
return 0;
return 1;
}

void Calc()
{
int i,j,x;
if(IsDone())
{
output();
return;
}
for(i = 0;i < 9;i++)
{
for(j = 0;j < 9;j++)
{
if(data[i][j] == 0)
{
for(x = 1; x <= 9;x++)
{
if(Check(i,j,x))
{
data[i][j] = x;
Calc();
}
}
if(x == 10)
{
data[i][j] = 0;
return ;
}
}
}
}
}

int main()
{
// input();
Calc();
output();

return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 急!C语言递归解数独 求用C语言编写一个解数独的程序,急 用C语言怎么解数独 汽车上坡后突然熄火是怎么回事? 二十四节气的惊是什么意思 发质脆弱缺什么?,头发稀疏,油腻怎么办? 碎冰蓝花语 碎冰蓝玫瑰寓意什么 模拟合同受法律保护吗? 自己拟定的合同有法律效应吗 分期乐不还款会怎么样?上征信吗? 漳州市亿超工贸有限公司怎么样? 配眼镜最好的网上平台- 问一问 云南亿超信息咨询有限公司怎么样? dnf挑战巨龙在哪 红色警戒2兵临城下怎么联网 红警—兵临城下的秘诀有哪些? 一般人的头发直径多少 头发有多粗 头发有多宽 dnf2022成长资源地下城在哪 求解数独题,用C语言实现 C语言怎么实现解决一个数独啊~~菜鸟求C语言大神给代码和思路&gt;&lt;~~好... c语言编写的解数独程序 上坡容易熄火,什么原因?? 实验小学六年级班主任工作计划总结 为什么上坡定点停车老是熄火? 形容老师很专业的词语 形容老师很专业的词语介绍 形容老师授课专业的成语 ...来迷失自己,要展现出自己的风采,活出最真实的自己!翻译英 只有我自己才是真实的英文怎样讲 医院安全自检自查报告 凛凛蝶的返祖c服怎么穿 我去漫展cos凛凛蝶啊,本人偏胖,腿嘛,就大腿有点粗,要注意什么呢_百度知 ... 问妖狐x仆ss中凛凛蝶的服饰风格 凛凛蝶返祖和服穿法 买的是漫视研的,外衣没有内系带,而且胯露出来的话... 武汉金拓·银湖时代怎么样?好不好?值不值得买? 个人征信报告中中信银行信秒贷贷款项目,分多次支用怎么显示 没怎么读 没多音字的读音 为什么最近我经常梦见我打手机或是按键盘时把号码按错,有时是紧张,有... 心里很烦不知道烦什么原因