Valid Sudoku
来源:互联网 发布:数据存储方式 编辑:程序博客网 时间:2024/04/28 14:29
Valid Sudoku
Total Accepted: 4240 Total Submissions: 15658My SubmissionsDetermine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
The Sudoku board could be partially filled, where empty cells are filled with the character '.'
.
A partially filled sudoku which is valid.
Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.
struct node { int i; int j; int key; node *next; node(int a,int b) :i(a),j(b),next(NULL){}};class Solution {public: bool valCore(node *p,int m[10][10][3]){ if (!p) return true; int len = 10; int row=p->i,colum=p->j; int i0 = row; int i1=colum; int i2=row/3*3+colum/3+1; for (int i=1; i<len; ++i){ if (m[i0][i][0]!=0 || m[i1][i][1]!=0 || m[i2][i][2]!=0) continue; m[i0][i][0] = i; m[i1][i][1] = i; m[i2][i][2] = i; p->key = i; if (valCore(p->next,m)) return true; m[i0][i][0] = 0; m[i1][i][1] = 0; m[i2][i][2] = 0; } return false; } void solveSudoku(vector<vector<char> > &b) { int mapSu[10][10][3]; memset(mapSu,0,sizeof(mapSu)); int len = 9; node *head=NULL,*tail=NULL,*p; for (int i=0; i<len; ++i) { for (int j=0; j<len; ++j) { if (b[i][j]=='.') { p = new node(i,j); if (tail){ tail->next=p; tail = p; } else { head = tail = p; } continue ; } int num = b[i][j]-'0'; if (mapSu[i][num][0]!=0 || mapSu[j][num][1]!=0 || mapSu[i/3*3+j/3+1][num][2]!=0) return ; mapSu[i][num][0] = num; mapSu[j][num][1] = num; mapSu[i/3*3+j/3+1][num][2] = num; } } if (valCore(head,mapSu)){ tail = head; while (tail) { b[tail->i][tail->j] = tail->key+'0'; tail = tail->next; } } while (head){ tail = head; while (tail->next && tail->next->next){ tail = tail->next; } if (tail->next) { delete tail->next; tail->next=NULL; } else { delete tail; head = NULL; tail = NULL; } } //return true; // }};
0 0
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- 模拟 二进制,十进制的加1
- jQuery新手教程:12个jQuery编程常用技巧分享(一)
- cacti与thold相关的错误日志
- jQuery新手教程:12个jQuery编程常用技巧分享(二)
- 线程传参数方法
- Valid Sudoku
- Confluence 信息(Info)宏
- Valid Sudoku
- Linux多线程程序设计学习笔记
- 位运算模拟二进制加法--位图方法
- 关于动态加载控件 事件触发的问题
- 关于Android的ClassLoader探索
- Visual Studio Ultimate 2012 静态激活密钥
- 题目集合