python实现数独游戏 java简单实现数独游戏


Posted in Python onMarch 30, 2018

 使用python和java实现数独游戏,有比较才有收获哦。

1、Python版

#--coding:utf-8--

import random
import itertools
from copy import deepcopy

def make_board(m=3):
 numbers = list(range(1,m**2+1))
 #可能出现的数字为1-9
 board = None
 #board是数度二维列表
 while board is None:
 board = get_board(m,numbers)
 return board

def get_board(m,numbers):
 n = m**2
 board = [[None for _ in range(n)] for _ in range(n)]
 for i,j in itertools.product(range(n),repeat=2):
 i0,j0 = i-i%m,j-j%m

 # i,j分别代表的是我们的行和列
 # i0和j0代表的是board[i][j]所在的区块的起始位置

 random.shuffle(numbers)
 #shuffle() 方法将序列的所有元素随机排序。
 for x in numbers:
  if(x not in board[i] 
  and all(row[j]!=x for row in board) 
  and all(x not in row[j0:j0+m] 
  for row in board[i0:i])):
  board[i][j] = x
  break
 else:#当循环正常结束时会执行else
  return None
 return board

def print_board(board,m=3):
 numbers = list(range(1,m**2+1))

 #每一行随机把5个数字变成None
 omit = 5 #omit变量掌控着每一行被抹去的数字个数
 challange = deepcopy(board)
 for i,j in itertools.product(range(omit),range(m**2)):
 x = random.choice(numbers) - 1
 challange[x][j] = None

 spacer = "++-----+-----+-----++-----+-----+-----++-----+-----+-----++"
 print(spacer.replace('-','='))
 for i,line in enumerate(challange):
 print("|| {} | {} | {} || {} | {} | {} || {} | {} | {} ||"
 .format(*(cell or ' ' for cell in line)))

 #format()函数中的 * 号,则是将所有的 cell 的不同值放入一个元组 tuple 之中,方便format函数调用
 if(i+1)%3==0:
  print(spacer.replace('-','='))
 else:
  print(spacer)
 return challange

Board = make_board()
print_board(Board)

效果:

python实现数独游戏 java简单实现数独游戏

2、Java版

package com.jimo;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class Shudu {

 public String[][] make_board(int m) {
 String[][] board = null;
 int n = m * m;
 List<Integer> numbers = new ArrayList<>();
 for (int i = 1; i <= n; i++) {
  numbers.add(i);
 }
 while (board == null) {
  board = get_board(m, numbers);
 }
 return board;
 }

 private String[][] get_board(int m, List<Integer> numbers) {
 int n = m * m;
 String[][] board = new String[n][n];
 for (int i = 0; i < n; i++) {
  for (int j = 0; j < n; j++) {
  boolean ok = true;
  // 打乱顺序
  Collections.shuffle(numbers);
  for (int x = 0; x < n; x++) {
   if (isOk(numbers.get(x) + "", board, i, j, m)) {
   board[i][j] = numbers.get(x) + "";
   ok = false;
   break;
   }
  }
  if (ok) {
   return null;
  }
  }
 }
 return board;
 }

 public void print_board(String[][] board, int m) {
 int n = m * m;
 int hard = 5;
 String[][] b = new String[n][n];
 System.arraycopy(board, 0, b, 0, board.length);
 Random rd = new Random();
 for (int i = 0; i < hard; i++) {
  for (int j = 0; j < n; j++) {
  int x = rd.nextInt(9);
  b[x][j] = null;
  }
 }
 String spacer = "+-----+-----+-----+-----+-----+-----+-----+-----+-----+";
 System.out.println(spacer);
 for (int i = 0; i < n; i++) {
  for (int j = 0; j < n; j++) {
  if (null == board[i][j]) {
   System.out.print("| |");
  } else {
   System.out.print("| " + b[i][j] + " |");
  }
  }
  System.out.println();
  System.out.println(spacer);
 }
 }

 /**
 * 判断行列和9格里是否重复
 * 
 * @param x
 * @param board
 * @return
 */
 private boolean isOk(String x, String[][] board, int i, int j, int m) {
 int i0 = i - i % m, j0 = j - j % m;
 int n = m * m;
 for (int k = 0; k < n; k++) {
  if (x.equals(board[i][k]) || x.equals(board[k][j])) {
  return false;
  }
 }
 for (int k = i0; k < i; k++) {
  for (int g = j0; g < j0 + m; g++) {
  if (board[k][g].equals(x)) {
   return false;
  }
  }
 }
 return true;
 }

 public static void main(String[] args) {
 Shudu s = new Shudu();
 int m = 3;
 String[][] b = s.make_board(m);
 for (int i = 0; i < 9; i++) {
  for (int j = 0; j < 9; j++) {
  System.out.print(b[i][j] + " ");
  }
  System.out.println();
 }
 s.print_board(b, m);
 }
}

效果:

3 4 7 6 5 2 8 1 9 
5 9 6 8 3 1 4 2 7 
2 1 8 9 7 4 5 3 6 
1 3 4 7 9 5 6 8 2 
7 5 2 1 8 6 9 4 3 
6 8 9 4 2 3 1 7 5 
4 7 5 3 1 9 2 6 8 
8 2 1 5 6 7 3 9 4 
9 6 3 2 4 8 7 5 1 
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| || || || 6 || 5 || || 8 || 1 || 9 |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| 5 || 9 || 6 || || || || 4 || || 7 |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| 2 || || || 9 || 7 || 4 || 5 || || 6 |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| 1 || 3 || 4 || 7 || 9 || || 6 || || |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| || 5 || 2 || 1 || || || || 4 || |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| || || || || 2 || 3 || || 7 || |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| 4 || 7 || || || 1 || 9 || || 6 || 8 |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| || 2 || 1 || 5 || 6 || 7 || || || 4 |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| 9 || 6 || || || || || || 5 || 1 |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+

可以看出java的代码量是python的两倍。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现希尔排序算法的原理与用法实例分析
Nov 23 Python
python3.x上post发送json数据
Mar 04 Python
使用python读取txt文件的内容,并删除重复的行数方法
Apr 18 Python
Python中循环引用(import)失败的解决方法
Apr 22 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
Feb 21 Python
python自动结束mysql慢查询会话的实例代码
Oct 27 Python
python框架Django实战商城项目之工程搭建过程图文详解
Mar 09 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
Jun 11 Python
详解KMP算法以及python如何实现
Sep 18 Python
Python 3.9的到来到底是意味着什么
Oct 14 Python
python xlsxwriter模块的使用
Dec 24 Python
解决IDEA翻译插件Translation报错更新TTK失败不能使用
Apr 24 Python
简单实现python数独游戏
Mar 30 #Python
Python使用MD5加密算法对字符串进行加密操作示例
Mar 30 #Python
windows环境下tensorflow安装过程详解
Mar 30 #Python
Python切片工具pillow用法示例
Mar 30 #Python
Python实现OpenCV的安装与使用示例
Mar 30 #Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 #Python
Jupyter安装nbextensions,启动提示没有nbextensions库
Apr 23 #Python
You might like
2020年4月新番动漫目录 官方宣布4月播出的作品一览
2020/03/08 日漫
PHP 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
php使用filter过滤器验证邮箱 ipv6地址 url验证
2013/12/25 PHP
destoon调用discuz论坛中带图片帖子的实现方法
2014/08/21 PHP
PHP简单实现合并2个数字键数组值的方法
2017/05/30 PHP
js 弹出框 替代浏览器的弹出框
2010/10/29 Javascript
ejs v9 javascript模板系统
2012/03/21 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
jquery遍历checkbox的注意事项说明
2014/02/21 Javascript
Angular中的Promise对象($q介绍)
2015/03/03 Javascript
JQuery日历插件My97DatePicker日期范围限制
2016/01/20 Javascript
关于Vue.js一些问题和思考学习笔记(1)
2016/12/02 Javascript
bootstrap日历插件datetimepicker使用方法
2016/12/14 Javascript
js实现随机抽选效果、随机抽选红色球效果
2017/01/13 Javascript
jQuery实现的浮动层div浏览器居中显示效果
2017/02/03 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
2018/11/13 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
2019/05/06 Javascript
vue+element模态框中新增模态框和删除功能
2019/06/11 Javascript
详解Vue2.5+迁移至Typescript指南
2019/08/01 Javascript
python读取中文txt文本的方法
2018/04/12 Python
python3实现磁盘空间监控
2018/06/21 Python
从0开始的Python学习016异常
2019/04/08 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
django项目中新增app的2种实现方法
2020/04/01 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
python实现代码审查自动回复消息
2021/02/01 Python
CSS3绘制圆角矩形的简单示例
2015/09/28 HTML / CSS
html5使用canvas画空心圆与实心圆
2014/12/15 HTML / CSS
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
最受欢迎的自我评价
2013/12/22 职场文书
临床医师专业个人自我评价
2014/01/08 职场文书
班组安全员工作职责
2014/02/01 职场文书
文化建设工作方案
2014/05/12 职场文书
丽江古城导游词
2015/02/03 职场文书
2015年公司保安年终工作总结
2015/05/14 职场文书
浅谈Python数学建模之固定费用问题
2021/06/23 Python