[HDU 1426] Sudoku Killer 数独
2015-08-11 19:49
435 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1426
题意:数独,每行,每列,每个3*3的小矩形里面都不能出现重复的数字。
思路:暴力搜搜搜。。
题意:数独,每行,每列,每个3*3的小矩形里面都不能出现重复的数字。
思路:暴力搜搜搜。。
[code]#include <cstdio> #include <cstring> #include <iostream> using namespace std; bool flag; int mapn[9][9];//状态 //分别表示行,列,3*3的小矩阵中那些数字出现过。 bool visn[9][10], vism[9][10], visx[3][3][10]; int Dfs(int pos) { if(flag || pos == 81){ flag = true; return 0; } int x = pos / 9; int y = pos % 9; if(mapn[x][y]){ //已经有值 Dfs(pos+1); return 0; } for(int i = 1; i <= 9; i++){ if(!flag && !visn[x][i] && !vism[y][i] && !visx[x/3][y/3][i]){ mapn[x][y] = i; visn[x][i] = vism[y][i] = visx[x/3][y/3][i] = true; Dfs(pos+1); if(!flag) mapn[x][y] = 0; visn[x][i] = vism[y][i] = visx[x/3][y/3][i] = false; } } return 0; } int main() { char str[5]; bool backs = false; while(~scanf("%s", str)){ flag = false; memset(visn, false, sizeof(visn)); memset(vism, false, sizeof(vism)); memset(visx, false, sizeof(visx)); int len = 0; do{ int x = len / 9; int y = len % 9; int val = (str[0] == '?' ? 0 : str[0] - '0'); mapn[x][y] = val; visn[x][val] = vism[y][val] = visx[x/3][y/3][val] = true; if(len == 80) break; scanf("%s", str); }while(++len); Dfs(0); if(backs) printf("\n"); backs = true; for(int i = 0; i < 9; i++){ for(int k = 0; k < 9; k++){ if(k) printf(" "); printf("%d", mapn[i][k]); } printf("\n"); } } return 0; }
相关文章推荐
- iOS中block和代理的使用
- hdu 5373 模拟
- string.h
- 连连看
- android adb 权限修改
- 使用AFNetWorking读取JSON出现NSCocoaErrorDomain Code=3840的解决方法
- 《Java开发实战经典》第三章答案3.10
- html5 高端客户商务必看 LzqIal(Jsper@super)整理
- Python补充05 字符串格式化 (%操作符)
- 【暑期基础3】S HDU 2071 Max Num
- 设计模式之外观模式
- LeetCode之Populating Next Right Pointers in Each Node II
- 互联网创业之让专业的人做专业的事
- Java I/O 详解
- sfsf
- 电子词典的实现
- vector的内存释放与swap()
- 《Java开发实战经典》第三章答案3.9
- 引用
- HDU 5373 The shortest problem (水题)