数独游戏的两种编程思路+代码
###数独
方法一:
设定三个方法;分别为行不重复,列不重复,单元格不重复;在判断是否重复的时候用了一个Boolean数组,默认值为false,若角标位置为true时那么说明已经重复了
需求:判断是否为数独矩阵/* 思路:当每行元素不得重复,并且每列元素不得重复,并且每个小方阵也不得重复*/public static void main(String[] args) {// TODO Auto-generated method stubint grid[][]={{5,3,4,6,7,8,9,1,2},{6,7,2,1,9,5,3,4,8},{1,9,8,3,4,2,5,6,7},{8,5,9,7,6,1,4,2,3},{4,2,6,8,5,3,7,9,1},{7,1,3,9,2,4,8,5,6},{9,6,1,5,3,7,2,8,4},{2,8,7,4,1,9,6,3,5},{3,4,5,2,8,6,1,7,9}};if(IsAllrow(grid)&&IsAllcol(grid)&&IsAllcell(grid)){System.out.println("是 数独");}else{System.out.println("不是数独");}}private static boolean IsAllcell(int[][] grid) {// TODO Auto-generated method stub//找基点for(int i=0;i<9;i+=3){for(int j=0;j<9;j+=3){//找偏移量,小矩阵boolean cell[]=new boolean[9];for(int x=0;x<3;x++){for(int y=0;y<3;y++){if(cell[grid[x+i][y+j]-1]==false){cell[grid[x+i][y+j]-1]=true;}else{return false;}}}}}return true;}private static boolean IsAllcol(int[][] grid) {// TODO Auto-generated method stubfor(int i=0;i<grid.length;i++){boolean row[]=new boolean[9];for(int j=0;j<grid[i].length;j++){if(row[grid[j][i]-1]==false){row[grid[j][i]-1]=true;}else{return false;}}}return true;}private static boolean IsAllrow(int[][] grid) {// TODO Auto-generated method stubfor(int i=0;i<grid.length;i++){boolean row[]=new boolean[9];for(int j=0;j<grid[i].length;j++){if(row[grid[i][j]-1]==false){row[grid[i][j]-1]=true;}else{return false;}}}return true;}
}
方法二:
依然是判断行不能重复列不能重复,这个用的方法是,分为以下几个情况:
一个大情况为grid里的数字不能超过1-9;基于大情况的前提
我们拿出一行,看这一行里有没有和某一个数字相同,那就是行不变列编,并且去除自己本身你这列,比的是这行的其他列;
我们再拿出一列,看这一列里有没有和这个数字相同的,那就是列不变行变,并且去除自己本身你这行,比的是这列的其他行;
我们再拿出一个单元格,看这个单元格里有没有和这个数字相同的,并且去除本身的行列,比的是剩余单元格的元素。
public class Demo_test3_1 {public static void main(String[] args) {// TODO Auto-generated method stubint grid[][]={{5,3,4,6,7,8,9,1,2},{6,7,2,1,9,5,3,4,8},{1,9,8,3,4,2,5,6,7},{8,5,9,7,6,1,4,2,3},{4,2,6,8,5,3,7,9,1},{7,1,3,9,2,4,8,5,6},{9,6,1,5,3,7,2,8,4},{2,8,7,4,1,9,6,3,5},{3,4,5,2,8,6,1,7,9}};System.out.println(Isvalid(grid)?"Valid solution":"Not valid solution");}private static boolean Isvalid(int[][] grid) {// TODO Auto-generated method stubfor (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) {return false;}}}return true;}public static boolean Isvalid(int [][]grid,int i,int j) {for(int colume=0;colume<9;colume++) {if(colume!=j&&grid[i][colume]==grid[i][j]) {//i行中的元素,与grid[i][j]这个元素比有重复的return false;}}for(int row=0;row<9;row++) {if(row!=i&&grid[i][j]==grid[row][j]) {return false;}}for(int row=(i/3)*3;row<9;row++) {for(int col=(j/3)*3;col<9;col++) {if(row!=i&&col!=j&&grid[i][j]==grid[row][col]) {return false;}}}return true; }
}
数独游戏的两种编程思路+代码相关推荐
- 分布式与人工智能课程(part7)--两种绘图思路
学习笔记,仅供参考,有错必纠 文章目录 两种绘图思路 函数式绘图 对象式绘图 对象式子图 方式1: ax=plt.subpolt(121) 方式2: ax=fig.add_sub(121) 方式3: ...
- [WebAssembly 入门] 实现数独游戏 - 如何优雅的组织Rust代码
title: [WebAssembly 入门] 实现数独游戏 - 如何优雅的组织Rust代码 date: 2018-4-23 22:55:00 categories: WebAssembly, 笔记 ...
- java编写一个彩票开奖的模拟程序.游戏共有两种玩法,一种是21选5,即玩家输入5个1到21内的不重复的数。另外一种玩法是6+1玩法,即要求玩家输入7个整数,代表所购买的彩票号码,最后一个是特码。
java编写一个彩票开奖的模拟程序.游戏共有两种玩法,一种是21选5,即玩家输入5个1到21内的不重复的数.另外一种玩法是6+1玩法,即要求玩家输入7个整数,代表所购买的彩票号码,最后一个是特码. 具 ...
- python支持的编程方式包括,python的两种编程方式是什么
一.交互式编程 什么是交互式编程,就是在命令行中输入python 命令即可启动交互式编程,提示窗口如下: 而且还用了Python3的print方法打印出一串字符串. 二.脚本式编程 通过脚本参数调用解 ...
- Unity3D动作类游戏中两种相机抖动
Unity3D动作类游戏中两种相机抖动 在动作类RPG游戏中,为了体现角色的技能和增加动作打击感,我们常常会给相机添加抖动效果来配合特效做一些技能效果. 我在网上搜了一下,然后结合自己的项目总结一下, ...
- 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...
java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...
- ML之分类预测:分类预测评估指标之AUC计算的的两种函数具体代码案例实现
ML之分类预测:分类预测评估指标之AUC计算的的两种函数具体代码案例实现 目录 分类预测评估指标之AUC计算的的两种函数代码案例实现 输出结果 实现代码
- html广告框,给WordPress首页添加简单广告框弹窗两种方法实现代码+插件
最近大家访问我的博客想必都看到了图片广告弹窗 话说虽然用户不喜欢,但是作为站长的我们却非常需要,毕竟我们也不是用爱发电,也是需要赚点打广告赚点外快来补贴服务器费用的.今天逛夏末浅笑博客的时候看到了这个 ...
- WIN10专业版安装docker不成功的两种解决思路
WIN10专业版安装docker不成功的两种解决思路 问题 分析和解决思路 问题 win10 专业版(win10 pro)装最新版docker 时偶尔会发生如下图所示的错误: 分析和解决思路 上图中可 ...
最新文章
- bzoj 3675: [Apio2014]序列分割
- 挖矿为什么要用显卡_数字货币行情分析 2020/07/17 为什么大佬们都转向显卡挖矿了?...
- 9050 端口 linux 进程,Linux中查看某个端口占用情况
- 前端开发 填充padding 0229
- 深度学习笔记_ RestNet-50
- 推荐个我在用的免费翻译软件,支持多家翻译API整合
- 【ArcGIS微课1000例】0032:ArcGIS中河流(曲线)、湖泊(水体色)图例制作案例教程
- 如何快速入门学习UG编程
- 计算机网络基础(韩立刚视频笔记)第一章 概述
- 阿贝尔分部求和法的应用(二)
- 什么是PR、什么是BD?
- python如何定义函数k_Python 函数
- yxc_第一章 基础算法(三)_离散化
- 弱监督学习框架 Detectron2/DRN-WSOD-pytorch 在服务器/windows上配置安装及使用
- 软件测试面试真题 | 黑盒测试和白盒测试的基本概念是什么?
- AS升级4.1后插件报错的问题
- Spring入门到放弃篇(1)- Spring国际化
- 基于Web的校园跑腿管理系统的设计与实现
- 软件工程导论---概述--软件危机
- USB转串口芯片 CH340 系列