首页 > 代码库 > A sudoku verifier

A sudoku verifier

public class SudokuVerifier {

	private boolean is1To9Row(int[][] a, int r) {
		
		int[] pos = new int[9];
		for (int i = 0; i < 9; i++) {
			if (pos[a[r][i]] == 1)
				return false;
			pos[a[r][i]] = 1;
		}
		for (int i : pos) {
			if (i == 0)
				return false;
		}
		return true;
	}
	
	private boolean is1To9Column(int[][] a, int c) {

		int[] pos = new int[9];
		for (int i = 0; i < 9; i++) {
			if (pos[a[i][c]] == 1)
				return false;
			pos[a[i][c]] = 1;
		}
		for (int i : pos) {
			if (i == 0)
				return false;
		}
		return true;
	}
	
	private boolean is1To9Sec(int[][] a, int x, int y)
	{
		int[] pos = new int[9];
		for (int i = 0 ; i < 3 ; i ++)
		{
			for (int j = 0 ; j < 3 ; j ++)
			{
				if (pos[a[x + i][x + j]] == 1)
					return false;
				pos[a[x + i][x + j]] = 1;
			}
		}
		for (int i : pos) {
			if (i == 0)
				return false;
		}
		return true;
	}
	
	// O(n)
	private boolean isValid(int[][] a)
	{
		// Assumes...
		
		for (int i = 0 ; i < 9 ; i ++)
		{
			// Rows
			if (!is1To9Row(a, i))
				return false;
			
			// Columns
			if (!is1To9Column(a, i))
				return false;
		}
		
		// Secs
		for (int i = 0 ; i < 9 ; i += 3)
		{
			for (int j = 0 ; j < 9 ; j += 3)
			{
				if (!is1To9Sec(a, i, j))
					return false;
			}
		}
		return true;
	}
}


A sudoku verifier