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中正则表达式的详细教程
Apr 30 Python
Python算法之图的遍历
Nov 16 Python
python读取文本绘制动态速度曲线
Jun 21 Python
Python3实现获取图片文字里中文的方法分析
Dec 13 Python
Python3.0 实现决策树算法的流程
Aug 08 Python
PHP统计代码行数的小代码
Sep 19 Python
Python列表list常用内建函数实例小结
Oct 22 Python
对python中assert、isinstance的用法详解
Nov 27 Python
python带参数打包exe及调用方式
Dec 21 Python
Python实现链表反转的方法分析【迭代法与递归法】
Feb 22 Python
Python Selenium 设置元素等待的三种方式
Mar 18 Python
详解Python 中的容器 collections
Aug 17 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
php 页面执行时间计算代码
2008/12/04 PHP
Ajax+PHP边学边练 之五 图片处理
2009/12/03 PHP
php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
2010/05/15 PHP
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
PHP empty函数报错解决办法
2014/03/06 PHP
php操作路径的经典方法(必看篇)
2016/10/04 PHP
php封装的smartyBC类完整实例
2016/10/19 PHP
PHP将字符串首字母大小写转换的实例
2017/01/21 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
Javascript 入门基础学习
2010/03/10 Javascript
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
简介JavaScript中toTimeString()方法的使用
2015/06/12 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
2015/11/17 Javascript
浅析JS运动
2015/12/28 Javascript
jQuery EasyUI中DataGird动态生成列的方法
2016/04/05 Javascript
浅谈js数据类型判断与数组判断
2016/08/29 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
javascript变量提升和闭包理解
2018/03/12 Javascript
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
layui+jquery支持IE8的表格分页方法
2019/09/28 jQuery
从Node.js事件触发器到Vue自定义事件的深入讲解
2020/06/26 Javascript
vue 扩展现有组件的操作
2020/08/14 Javascript
Python中的__slots__示例详解
2017/07/06 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
python中return不返回值的问题解析
2020/07/22 Python
Python偏函数实现原理及应用
2020/11/20 Python
关于CSS Tooltips(鼠标经过时显示)的效果
2013/04/10 HTML / CSS
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
外贸英语毕业生自荐信
2013/11/14 职场文书
《影子》教学反思
2014/02/21 职场文书
大学生作弊检讨书
2014/09/11 职场文书
三好学生事迹材料
2014/12/24 职场文书
中秋节晚会开场白
2015/05/29 职场文书
浅析CSS在DevTools 中架构演变
2021/10/05 HTML / CSS