题目描述
blablabla
算法思想
题目思想很简单就是暴力循环
1.可以使用Java中的hashset去重
2.在输入的时候判断输入的数字是否在合法范围之内,1-n*n(不一定是9),如果不合法进行下一次的循环。
但是这个判断一定要在全部输入完成之后才可以,不能输入的过程直接continue
3.判断m个小矩形的时候的for循环写法
四层for循环
前两层分别是标记每一大行矩阵的起点,和每一列矩阵的起点
后两层的坐标表示的是每一次的位移量
package day;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
public class 数独检查 {
/**
* @param args
* @throws IOException
* @throws NumberFormatException
*/
static int n;
static int m;
static int a[][];
static int k=0;
public static boolean checkrow() {
for(int i=0;i<m;i++){//行
HashSet<Integer> hashSet = new HashSet<Integer>();
for(int j=0;j<m;j++){
hashSet.add(a[i][j]);
}
if(hashSet.size()<m) return false;
}
return true;
}
public static boolean checkcol() {
for(int i=0;i<m;i++){//列
HashSet<Integer> hashSet = new HashSet<Integer>();
for(int j=0;j<m;j++){
hashSet.add(a[j][i]);
}
if(hashSet.size()<m) return false;
}
return true;
}
public static boolean checkN() {
for(int i=0;i<m;i+=n){
for(int j=0;j<m;j+=n){
HashSet<Integer>hashSet = new HashSet<Integer>();
for(int x=0;x<n;x++){
for(int y=0;y<n;y++){
hashSet.add(a[x+i][y+j]);
}
}
if(hashSet.size()<m){
return false;
}
}
}
return true;
}
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
int t=Integer.parseInt(bufferedReader.readLine());
for(int p=0;p<t;p++){
k++;
n=Integer.parseInt(bufferedReader.readLine());
m=n*n;
a=new int [m][m];
boolean flag=false;
for(int i=0;i<m;i++){
String w[]=bufferedReader.readLine().split(" ");
for(int j=0;j<m;j++){
int tem=Integer.parseInt(w[j]);
a[i][j]=tem;
if(tem>=1 && tem<=m) ;
else{
flag=true;
}
}
}
if(flag){
System.out.println("Case #"+k+": No");
continue;
}
if(!flag){
if(checkcol() && checkN() && checkrow()) {
System.out.println("Case #"+k+": Yes");
}else {
System.out.println("Case #"+k+": No");
}
}
}
}
}