Valid Sudoku

 题目描述:Determine 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 '.'.
   (确定数独是否有效,根据:数独谜题-规则。
    数独板可以部分填充,其中空单元格充满字符。)
   Note:A valid Sudoku board (partially filled) is not necessarily solvable.
   Only the filled cells need to be validated.
   (一个有效的数独板(部分填充)不一定是可解的。

     只完整的数独板需要去验证。)

PS:这个题并不是让你去解数独,而是判断一个数独合法不合法。

数独规则:http://sudoku.com.au/TheRules.aspx

public class Valid_Sudoku {
	public static String board[][]=new String[9][9];//数独面板
	public static ArrayList al=new ArrayList();//用于判断有没有一样的数
	public static boolean judge()
	{
		//检查行是否合格
		for(int i=0;i<9;i++)
		{
			al.clear();
			for(int j=0;j<9;j++)
			{
				if(al.contains(board[i][j])&&!board[i][j].equals("."))
				{
					return false;
				}
				else
				{
					if(!board[i][j].equals("."))
						al.add(board[i][j]);
				}
			}
		}
		//检查列是否合格
		for(int i=0;i<9;i++)
		{
			al.clear();
			for(int j=0;j<9;j++)
			{
				if(al.contains(board[j][i])&&!board[j][i].equals("."))
				{
					return false;
				}
				else
				{
					if(!board[j][i].equals("."))
						al.add(board[j][i]);
				}
			}
		}
		//检查九宫格内时候否合格
		for(int partx=0;partx<3;partx++)
		{
			for(int party=0;party<3;party++)
			{
				al.clear();
				for(int i=partx*3;i<partx*3+3;i++)
				{
					for(int j=party*3;j<party*3+3;j++)
					{
						if(al.contains(board[i][j])&&!board[i][j].equals("."))
						{
							return false;
						}
						else
						{
							if(!board[i][j].equals("."))
								al.add(board[i][j]);
						}
					}
				}
			}
		}
		return true;
	}
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		for(int i=0;i<9;i++)
		{
			for(int j=0;j<9;j++)
			{
				String data=sc.next();
				board[i][j]=data;			
			}
		}
		System.out.println(judge());
	}
	
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值