NYOJ 722 数独
2014-07-19 10:29
316 查看
[b]数独[/b]
时间限制:1000ms|内存限制:65535KB难度:4
[b]描述[/b]
数独是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个3*3宫内的数字均含1-9,不重复。每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无解或多解的题目都是不合格的。
有一天hrdv碰到了一道号称是世界上最难的数独的题目,作为一名合格的程序员,哪能随随便便向困难低头,于是他决定编个程序来解决它。。
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<vector> #include<climits> #include<ctype.h> #include<cmath> #include<algorithm> #defineLLlonglong usingnamespacestd; intd[9][9]; boolisValid(intx,inty,intval){ inti,j,a=x/3,b=y/3; for(i=0;i<9;i++) if(d[x][i]==val||d[i][y]==val)returnfalse; for(i=0;i<3;i++){ for(j=0;j<3;j++){ if(d[i+a*3][j+b*3]==val)returnfalse; } } returntrue; } booldfs(intcur){ if(cur==81)returntrue; if(d[cur/9][cur%9]) returndfs(cur+1); for(inti=1;i<10;i++){ if(isValid(cur/9,cur%9,i)){ d[cur/9][cur%9]=i; if(dfs(cur+1))returntrue; } } d[cur/9][cur%9]=0; returnfalse; } intmain(){ intkase,i,j; scanf("%d",&kase); while(kase--){ for(i=0;i<9;i++){ for(j=0;j<9;j++) scanf("%d",d[i]+j); } dfs(0); for(i=0;i<9;i++){ for(j=0;j<8;j++) printf("%d",d[i][j]); printf("%d\n",d[i][j]); } } return0; }
ViewCode
相关文章推荐
- 回溯法 —— NYOJ 722 数独
- nyoj-722 数独(深搜,哈希)
- NYOJ 722 数独
- Nyoj 722 数独
- NYOJ 722 数独 【DFS】+【预处理】
- NYOJ 722 数独
- nyoj722 数独
- NYOJ 722 数独(dfs)
- nyoj722 数独
- NYOJ 722 数独
- nyoj 722 数独
- HDU-1426-Sudoku Killer&&NYOJ-722-数独
- NYOJ 722 数独
- DLX 求解数独 模 板 NYOJ 722 , poj 2676
- NYOJ 722 数独
- nyoj 722 数独 【经典DFS】
- NYOJ 722 数独
- nyoj-722 数独
- NYOJ-722 数独
- nyoj722 数独