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编写一个模仿CPU工作的程序
Apr 16 Python
Python之Scrapy爬虫框架安装及使用详解
Nov 16 Python
numpy中索引和切片详解
Dec 15 Python
python保存文件方法小结
Jul 27 Python
python绘制热力图heatmap
Mar 23 Python
Python装饰器语法糖
Jan 02 Python
djang常用查询SQL语句的使用代码
Feb 15 Python
Python实现把多维数组展开成DataFrame
Nov 30 Python
python range实例用法分享
Feb 06 Python
Pandas将列表(List)转换为数据框(Dataframe)
Apr 24 Python
pycharm配置python 设置pip安装源为豆瓣源
Feb 05 Python
Python图像处理之图像拼接
Apr 28 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
The specified CGI application misbehaved by not returning a complete set of HTTP headers
2011/03/31 PHP
PHP下判断网址是否有效的代码
2011/10/08 PHP
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
PHP实现的简单mock json脚本分享
2015/02/10 PHP
Firefox outerHTML实现代码
2009/06/04 Javascript
Mootools 1.2教程 Fx.Tween的使用
2009/09/15 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
javascript中undefined与null的区别
2015/08/16 Javascript
基于jQuery+PHP+Mysql实现在线拍照和在线浏览照片
2015/09/06 Javascript
基于JavaScript实现div层跟随滚动条滑动
2016/01/12 Javascript
js实现的彩色方块飞舞奇幻效果
2016/01/27 Javascript
js enter键激发事件实例代码
2016/08/17 Javascript
Vue.js第三天学习笔记(计算属性computed)
2016/12/01 Javascript
Bootstrap 中data-[*] 属性的整理
2018/03/13 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
jQuery AJAX应用实例总结
2020/05/19 jQuery
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
[44:04]OG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python如何发布程序的详细教程
2018/10/09 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
对Django中内置的User模型实例详解
2019/08/16 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
HTML5 canvas标签实现刮刮卡效果
2015/04/24 HTML / CSS
荷兰优雅女装网上商店:Heine
2016/11/14 全球购物
俄罗斯最大的灯具网站:Fandeco
2020/03/14 全球购物
Java程序员常见面试题
2015/07/16 面试题
英文简历自荐信范文
2013/12/11 职场文书
有限责任公司股东合作协议书范本
2014/10/30 职场文书
2015年南京大屠杀纪念日活动总结
2015/03/24 职场文书
2016年中学端午节主题活动总结
2016/04/01 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书
Python竟然能剪辑视频
2021/05/25 Python
mysql事务对效率的影响分析总结
2021/10/24 MySQL