数独程序设计与相关代码.docx

数独程序设计与相关代码.docx

ID:52199430

大小:28.11 KB

页数:8页

时间:2020-03-24

数独程序设计与相关代码.docx_第1页
数独程序设计与相关代码.docx_第2页
数独程序设计与相关代码.docx_第3页
数独程序设计与相关代码.docx_第4页
数独程序设计与相关代码.docx_第5页
资源描述:

《数独程序设计与相关代码.docx》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、数独程序设计:l主要思想是:先设计出一个符合规则的终局,再覆盖掉其中的一些数据作为初局,以已知数据的数目区分等级l主要过程是:l用a[10][10]来接收输入数据的数组,先初始化为0l用一维数组deal[82]处理题目,并且保存最终结果l用fix[82]记录哪些位置是确定的,确定为1,否则为0l用nsure[82][10]记录所有未确定数字的可能性,第一维下标是元素在deal中的位置,第二维是此元素的可能值l用b[82]来放置fix为0即未确定元素的位置,实现回溯算法数独程序代码:l#includel#include

2、b.h>l#includelinta[10][10];lintdeal[82];lintfix[82];lintnsure[82][10];lintb[82];lintmain()//主函数l{lsrand(time(0));//设置时间种子为0lstart();//出题函数lreturn0;l}lvoidset()//初始化函数,所有位置设为0l{linti,j,k;llfor(i=0;i<9;i++)lfor(j=0;j<9;j++)la[i][j]=0;lfor(k=1;k<=81;k++)ldeal[k]=0;l}lint

3、transform_to_line(inti)l{lintline;lline=i/9+(i%9!=0);//计算i所在行lreturnline;l}llinttransform_to_row(inti)l{lintrow;lrow=i%9+9*(i%9==0);//获得i所在列lreturnrow;l}lvoidtransform_to_a(inti)//deal[i]->a[line][row]的转换l{lintl,r;ll=transform_to_line(i);//获得i所在的行lr=transform_to_row(i);//获得i所

4、在的列la[l][r]=deal[i];l}lvoidrandom()//从1-9中随机产生几个值输入deal[1]至deal[9]l{linti,j,r;lintchange=1;//标记lintb[10]={0,0,0,0,0,0,0,0,0,0};lfor(i=1;i<=9;)//从1-9中随机产生9个不同的值l{lchange=1;lj=1+rand()%9;//产生一个1~9的数lfor(r=1;r<=9;r++)lif(b[r]==j)change=0;//有重复的就舍弃lif(change==1)l{b[i]=j;i++;}l}lf

5、or(i=1;i<=9;i++)l{ldeal[i]=b[i];//将b中元素存入deal中ltransform_to_a(i);//deal中数存入al}l}lintline(intline,intvalue)//检验行l{linti;lfor(i=1;i<=9;i++)l{lif(a[line][i]==value)return0;//不符合规则返回0l}lreturn1;l}lintrow(introw,intvalue)//检验列l{linti;lfor(i=1;i<=9;i++)l{lif(a[i][row]==value)return

6、0;l}lreturn1;l}lintsquare(intline,introw,intvalue)//检验3*3的九宫l{lintL,R,i,j;lL=(line%3!=0)+line/3;//L表示所在九宫的行数lR=(row%3!=0)+row/3;//R表示所在九宫的列数lfor(i=(L-1)*3+1;i<=L*3;i++)l{lfor(j=(R-1)*3+1;j<=R*3;j++)lif(a[i][j]==value)return0;l}lreturn1;l}lintbeExist(inti,intj)//判断数组中位置为i的元素是否

7、已确定l{lintl,r;ll=transform_to_line(i);//获得第i个数在a中的行lr=transform_to_row(i);//获得第i个数在a中的列lif(line(l,j)*row(r,j)*square(l,r,j)==0)lreturn1;//不合规则返回1lelselreturn0;l}lvoidsetPb()//通过nsure数组确定各个位置的可能值l{linti,j;lfor(i=1;i<=81;i++)//i为deal中位置为i的元素l{lfor(j=1;j<=9;j++)//j为1~9的可能值,不可能为j的

8、设为-1l{lif(deal[i]!=0)nsure[i][j]=-1;//若deal[i]已输入数据,则将可能值设为-1llelsei

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。