poj-2676sudoku
来源:互联网 发布:国外如何在淘宝购物 编辑:程序博客网 时间:2024/05/20 22:30
思路:深搜, 主要是判断是否在同一行,同一列,同一格。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=10;const int INF=0x3f3f3f3f;int T, cnt;int mp[maxn][maxn], row[maxn][maxn], col[maxn][maxn], grid[maxn][maxn];int zero[maxn*maxn][2];int location(int i, int j){return ((i-1)/3)*3+(j-1)/3+1;}int dfs(int step){if(step==cnt+1)return 1;for(int i=1; i<=9; i++){if(!row[zero[step][0]][i] && !col[zero[step][1]][i] && !grid[location(zero[step][0], zero[step][1])][i]){row[zero[step][0]][i]=1;col[zero[step][1]][i]=1;grid[location(zero[step][0], zero[step][1])][i]=1;mp[zero[step][0]][zero[step][1]]=i;if(dfs(step+1))return 1;row[zero[step][0]][i]=0;col[zero[step][1]][i]=0;grid[location(zero[step][0], zero[step][1])][i]=0;}}return 0;}int main(){cin>>T;while(T--){cnt=0;memset(col, 0, sizeof(col));memset(row, 0, sizeof(row));memset(grid, 0, sizeof(grid));for(int i=1; i<=9; i++){for(int j=1; j<=9; j++){scanf("%1d", &mp[i][j]);if(mp[i][j]){row[i][mp[i][j]]=1;col[j][mp[i][j]]=1;grid[location(i, j)][mp[i][j]]=1;}else{zero[++cnt][0]=i;zero[cnt][1]=j;}}}dfs(1);for(int i=1; i<=9; i++){for(int j=1; j<=9; j++)cout<<mp[i][j];cout<<endl;}}return 0;}
阅读全文
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
- 机器学习课堂笔记1
- C++模板实现链式队列
- 最大连续子串
- C++中this指针的用法及介绍
- SQL-EXIST-查询选修了全部课程的学生姓名
- poj-2676sudoku
- 技术有时间衰减因子.
- 10大深度学习架构:计算机视觉优秀从业者必备(附代码实现)
- Vmware打开服务器的时候提示“该虚拟机似乎正在使用中。”
- Kali 2.0 国内源
- 面试6- web
- 第K大的数
- Python基础:浅谈关键字参数、位置参数
- 消灭兔子