java数独计算代码,Java数独
c++验证数独问题,求代码
把上述的数据存入文件,运行时从文件中读取:
创新互联是一家集网站建设,饶阳企业网站建设,饶阳品牌网站建设,网站定制,饶阳网站建设报价,网络营销,网络优化,饶阳网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
#includestdio.h
#includestring.h
int a[9][9];
int checkAnswer()
{int i,j,s,b[10],i1,j1;
for(i=0;i9;i++)
{memset(b,0,sizeof(b));
for(j=0;j9;j++)
b[a[i][j]]=1;
for(j=s=0;j10;j++)
s+=b[j];
if(s-9)return 0;
}
for(i=0;i9;i++)
{memset(b,0,sizeof(b));
for(j=0;j9;j++)
b[a[j][i]]=1;
for(j=s=0;j10;j++)
s+=b[j];
if(s-9)return 0;
}
for(i=0;i9;i+=3)
for(j=0;j9;j+=3)
{memset(b,0,sizeof(b));
for(i1=0;i13;i1++)
for(j1=0;j13;j1++)
b[a[i+i1][j+j1]]=1;
for(j1=s=0;j110;j1++)
s+=b[j1];
if(s-9)return 0;
}
return 1;
}
int main()
{int t,i,j;
FILE *fp;
if((fp=fopen("d:\\0.txt","r"))==NULL)
{printf("File open error!\n");
return 0;
}
fscanf(fp,"%d",t);
while(t--)
{for(i=0;i9;i++)
for(j=0;j9;j++)
fscanf(fp,"%d",a[i][j]);
printf("%s\n",checkAnswer()?"Yeah!":"Oh,No!");
}
fclose(fp);
return 0;
}
用c语言写一个简易数独的思路。要代码
#includestdio.h
int num[9][9], xy[9][9];
int check(int x, int y) {
int i, m, n;
for(i = 0; i 9; i++)
if ((xy[x][y] == xy[i][y]i != x)||(xy[x][y] == xy[x][i]i != y))
return 0;
for(i = 0, m = x / 3 * 3, n = y / 3 * 3; i 9; i++)
if (xy[x][y] == xy[m + i / 3][n + i % 3]m + i / 3 != xn + i % 3 != y)
return 0;
return 1;
}
void search(int x, int y) {
if (x == 9)
for(x = 0; x 9; x++) {
for(y = 0; y 9; y++)
printf("%d ", xy[x][y]);
printf("\n");
}
else if (num[x][y])
search(x + (y + 1) / 9, (y + 1) % 9);
else
for(xy[x][y] = 1; xy[x][y] = 9; xy[x][y]++)
if (check(x, y))
search(x + (y + 1) / 9, (y + 1) % 9);
return;
}
int main() {
int i, j;
for(i = 0; i 9; i++)
for(j = 0; j 9; j++) {
scanf("%d", num[i][j]);
xy[i][j] = num[i][j];
}
search(0, 0);
return 0;
}
输入为9行9列整数,已知的整数填写对应的数字,尚待计算的未知数字填写0。
该代码的思路很简单,就是从第一行第一列开始依次填入数字,检查是否是在同一行、同一列、同一宫有没有填入重复数字,如果没有就继续填入下一个数字,如果有就返回。
虽然效率稍低,但原理简单、表述直白、易于理解,更有效率的代码是使用十字链表完成,如有兴趣可继续深入
数独的计算公式是什么
1、联除法。
在并排的三个九宫格中的两排寻找相同数字,再利用九宫格得出另一排中该数字位置,该方法适用于中高级数独.
2、巡格法
找出在每个九宫格中出现频率较高的数字,得出该数字在其余九宫格内位置,该方法应用于方法一之后。
3、排除法
这个方法是解决问题的关键,易被常人所忽略。在各行列或九宫格中观察,若有个位置其它数字都不能填,就填余下的数字
4、待定法
此方法不常用却很有效。暂时确定某个数字在某个区域,再利用其来进行排除
5、行列法
此方法用于收官阶段,利用先从行列突破来提高解题效率。
6、假设法
即在某个位置随机的填上一个数字,再进行推演,并有可能最终产生矛盾而否定结论。
7、频率法
这种方法相比于上一种方法更能提高效率。在某一行列或九宫格列举出所有情况,再选择某位置中出现频率高的数字
8、候选数法
使用候选数法解数独题目需先建立候选数列表,根据各种条件,逐步安全的清除每个宫格候选数的不可能取值的候选数,从而达到解题的目的。
扩展资料:
数独的出题方法:
1、挖洞法
从有到无的出题方法。先生成一个终盘,然后挖去部分数字形成一道题目。
2、填数法
从无到有的出题方法。在一个空盘面上填上部分数字形成一道题目。2007年日本NPGenerator软件的网站提出了一种边推理边出题的出题法,可以手工打造出漂亮图案的数独题目。
参考资料来源:百度百科-数独
参考资料来源:百度百科-数独技巧
数独算法
给你数独计算器:
;category_id=143
数独游戏:
;category_id=174
数独算法:
数独快速入门(上篇)
数独快速入门(中篇)
数独快速入门(下篇)
唯一解法
唯一候选数法
隐性三链数删减法
隐性数对删减法
三链列删减法
区块删减法
矩形顶点删减法
关键数删减法
补充:
合格的数独是只有唯一解。
而数独有难易度的分类,找一份报纸注意刊登的数独谜题是1星,还是5星。
在网络上,更分成容易题、进阶题、难题、极难题、超难题....
一般都是依据需要运用的技巧,而技巧是区分难易的。
数独不用猜测,解题全部是运用逻辑推理。
数独不用电脑程序分析,就可以解的题目是直观法数独题。
而超难题是需要电脑分析,及把全盘标示可选数,那是可选数谜题。
没有所谓解题通则。
1.直观解(一般报纸、书籍)
直观法技巧
直观法技巧 01 (容易级) 唯一解
直观法技巧 02 (容易级) 基本摒除
直观法技巧 03 (进阶级) 宫对行列摒除
直观法技巧 04 (进阶级) 行列对宫摒除
直观法技巧 05 (进阶级) 群组解法
直观法技巧 06 (困难级) X-Wing摒除法01
直观法技巧 06 (困难级) X-Wing摒除法02
直观法技巧 07 (困难级) 数偶摒除法
2.可选数(以程序自动生成可选数)
Last value in block, row or column
Hidden Single in block
Hidden Single in row or column
Direct Pointing
Direct Claiming
Direct Hidden Pair
Naked Single
Direct Hidden Triplet
Pointing
Claiming
Naked Pair, X-Wing, Hidden Pair
Naked Triplet, Swordfish, Hidden Triplet
XY-Wing, XYZ-Wing
Unique rectangles and loops
Naked Quad, Jellyfish, Hidden Quad
Bivalue Universal Graves
Aligned Pair Exclusion
Bidirectioal X-Cycles and Y-Cycles
Forcing X-Chains
Forcing Chains, Bidirectional Cycles
Nishio
Cell/Region Forcing Chains
Dynamic Forcing Chains
通则无法解的题
直观难题
006589307
030602008
809703500
000891403
394265871
180374000
003026785
000458030
008037200
可选数极难题
970000000
003927000
008410709
300700400
060050070
007040003
105074900
000068507
786000042
不要把谜题解一次列出,而是找出下一步,及他的逻辑推理方法。
不要用猜测。
如何用C解9*9数独,求代码,高手勿喷。
int i, j, n=3; int col = 1, line = 0; a[line][col] = 1"%d ", a[i][j]); printf("\\n"); } return 0; } 我有解
三、数独:编写一个程序,计算出3*3, 4*4, 5*5的个数。
uint32_t data[datasize] = {/*你要放的数组*/};
#define datasize (sizeof(data)) //数组长度
uint8_ t three_number = 0;
uint8_ t four_number = 0;
uint8_ t five_number = 0;
void Math_SD(uint32_t *data) //获取数组指针
{
/*一坨if,判断对应上哪个就朝哪里加*/
/*要看就printf打印或者return函数下你某个要进入的界面或者函数*/
}
名称栏目:java数独计算代码,Java数独
文章分享:http://scyanting.com/article/hosids.html