POJ 2676 Sudoku
来源:互联网 发布:淘宝发布宝贝模板 编辑:程序博客网 时间:2024/05/05 12:24
http://poj.org/problem?id=2676
杭电上有类似的题目,可以用舞蹈链求解,不过9*9的数独,舞蹈链完全没有粗暴又简单的DFS来得高效。
本题不需要判断不成立条件,其实判断不成立很简单,两点:第一,输入行、列、九宫格合法,第二,能搜索出来。
呈上我短小精悍又粗暴的AC代码:
#include <cstdio>#include <cstdlib>#include <cstring>bool row[9][10]; //行bool col[9][10]; //列bool gow[3][3][10]; //九宫格int map[9][9];bool dfs(int z){ if(z>=81){ return true; } int x=z/9; int y=z%9; if(map[x][y]!=0){ return dfs(z+1); } for(int i=1;i<=9;i++){ if(!row[x][i] && !col[y][i] && !gow[x/3][y/3][i]){ row[x][i]=col[y][i]=gow[x/3][y/3][i]=1; map[x][y]=i; if(dfs(z+1)) return true; row[x][i]=col[y][i]=gow[x/3][y/3][i]=0; map[x][y]=0; } } return false;}int main(){ int t; scanf("%d",&t); while(t--){ int i,j; memset(row,0,sizeof(row)); memset(col,0,sizeof(col)); memset(gow,0,sizeof(gow)); for(i=0;i<9;i++){ char temp[10]; scanf("%s",temp); for(j=0;j<9;j++){ int c=temp[j]-'0'; map[i][j]=c; if(c!=0){ row[i][c]=col[j][c]=gow[i/3][j/3][c]=1; } } }// printf("%s\n",dfs(0)?"YES":"NO"); dfs(0); for(i=0;i<9;i++){ for(j=0;j<9;j++) printf("%d",map[i][j]); printf("\n"); } }}
0 0
- poj 2676 Sudoku
- POJ 2676 Sudoku
- POJ 2676 Sudoku dfs
- Poj 2676 Sudoku
- POJ 2676 Sudoku [暴搜]
- POJ 2676 Sudoku
- POJ 2676 Sudoku
- POJ 2676 Sudoku
- POJ 2676 Sudoku
- POJ 2676 Sudoku
- POJ 2676—Sudoku
- POJ-2676-Sudoku
- poj 2676 Sudoku
- POJ 2676 Sudoku
- POJ 2676 Sudoku
- POJ 2676 Sudoku
- POJ 2676 sudoku
- poj 2676 Sudoku
- volatile变量
- 【Unity3d】学习笔记(7)
- android使用模拟机测试时,若要联网IP地址该怎么写?
- 操作系统-硬件部分
- 搭建unix学习环境
- POJ 2676 Sudoku
- android使用listview
- 2013年实训项目回顾
- android 内存泄露小计
- 非祸不单行
- 刪除已存儲在SVN客戶端的账号与密…
- c++函数模板入门(一)
- 如何使用命令修改SQL用戶及密码
- 如何连接到Samba共享服务