JAVA二维数组应用-独问题的解决方案-9x9网格为例



importjava.util.Scanner; 
public class CheckShuDuKuSolution { 
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        //读取数组
        int[][] grid=readASolution();
        System.out.println(isValid(grid)?"Valid slution":"Invalid solution");
    }
    
    //从控制台读取二维数组
    public static int[][] readASolution(){
        //给予读取指令
        Scanner input=new Scanner(System.in);
        
        System.out.println("输入二维数组:");
        int[][] grid=new int[9][9];
        for(int i=0;i<grid.length;++i)
            for(int j=0;j<grid[i].length;++j)
                grid[i][j]=input.nextInt();
        input.close();
        return grid;
    }
    
    //测试输入的数组是否有效
    public static boolean isValid(int[][] grid){
        for(int i=0;i<grid.length;++i)
            for(int j=0;j<grid[i].length;++j)
                if(grid[i][j]<1||grid[i][j]>9||!isValid(i,j,grid))
                   return false;
        return true; //成功即为有效
    }
    
    //测试输入的数组元素均满足"九宫数组解法"之一
    public static boolean isValid(int i, int j, int[][] grid){
        //测试行唯一
        for(int colnum=0;colnum<9;++colnum)
            if(colnum!=j&&grid[i][colnum]==grid[i][j])
                return false;
        
        //测试列唯一
        for(int row=0;row<9;++row)
            if(row!=i&&grid[row][j]==grid[i][j])
                return false;
        
        //测试在3*3的格网也是唯一
        for(int row=(i/3)*3;row<(i/3)*3+3;++row)  //格网的位移由int的取值方式决定
            for(int col=(j/3)*3;col<(j/3)*3+3;++col)
                if(row!=i&&col!=j&&grid[row][col]==grid[i][j])
                   return false;
        return true;
    }
}

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值