点 相当于任何可能的值,分别判断横竖,还有3*3的小格子。
// LeetCode_ValidSudoku.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <map>
using namespace std;
bool isValidSudoku(vector<vector<char> > &board) {
map<char,int> mp;
for (int i=0;i<9;i++)
{
mp.clear();
for (int j=0;j<9;j++)
{
mp[board[i][j]]++;
if (mp[board[i][j]]>1&&board[i][j]!='.')
{
return false;
}
}
}
for (int j=0;j<9;j++)
{
mp.clear();
for (int i=0;i<9;i++)
{
mp[board[i][j]]++;
if (mp[board[i][j]]>1&&board[i][j]!='.')
{
return false;
}
}
}
for (int m=0;m<9;m+=3)
{
for (int n=0;n<9;n+=3)
{
mp.clear();
for (int i=m;i<m+3;i++)
{
for (int j=n;j<n+3;j++)
{
mp[board[i][j]]++;
if (mp[board[i][j]]>1&&board[i][j]!='.')
{
return false;
}
}
}
}
}
return true;
}
int _tmain(int argc, _TCHAR* argv[])
{
vector<vector<char> > board;
vector<char> vec;
vec.push_back('4');vec.push_back('6');vec.push_back('3');vec.push_back('7');vec.push_back('2');vec.push_back('8');vec.push_back('9');vec.push_back('5');vec.push_back('1');
board.push_back(vec);
vec.clear();
vec.push_back('2');vec.push_back('5');vec.push_back('9');vec.push_back('4');vec.push_back('6');vec.push_back('1');vec.push_back('7');vec.push_back('3');vec.push_back('8');
board.push_back(vec);
vec.clear();
vec.push_back('7');vec.push_back('8');vec.push_back('1');vec.push_back('3');vec.push_back('5');vec.push_back('9');vec.push_back('6');vec.push_back('4');vec.push_back('2');
board.push_back(vec);
vec.clear();
vec.push_back('5');vec.push_back('3');vec.push_back('2');vec.push_back('1');vec.push_back('9');vec.push_back('7');vec.push_back('4');vec.push_back('8');vec.push_back('6');
board.push_back(vec);
vec.clear();
vec.push_back('9');vec.push_back('1');vec.push_back('4');vec.push_back('6');vec.push_back('8');vec.push_back('2');vec.push_back('5');vec.push_back('7');vec.push_back('3');
board.push_back(vec);
vec.clear();
vec.push_back('6');vec.push_back('7');vec.push_back('8');vec.push_back('5');vec.push_back('4');vec.push_back('3');vec.push_back('1');vec.push_back('2');vec.push_back('9');
board.push_back(vec);
vec.clear();
vec.push_back('8');vec.push_back('2');vec.push_back('6');vec.push_back('9');vec.push_back('7');vec.push_back('5');vec.push_back('3');vec.push_back('1');vec.push_back('4');
board.push_back(vec);
vec.clear();
vec.push_back('1');vec.push_back('4');vec.push_back('7');vec.push_back('2');vec.push_back('3');vec.push_back('6');vec.push_back('8');vec.push_back('9');vec.push_back('5');
board.push_back(vec);
vec.clear();
vec.push_back('3');vec.push_back('9');vec.push_back('5');vec.push_back('8');vec.push_back('1');vec.push_back('4');vec.push_back('2');vec.push_back('6');vec.push_back('7');
board.push_back(vec);
vec.clear();
cout<<isValidSudoku(board)<<endl;
system("pause");
return 0;
}
测试例子的数独是这里的
http://sudoku.com.au/TheRules.aspx