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操作ssh实现服务器日志下载的方法
Jun 03 Python
Python PyQt5实现的简易计算器功能示例
Aug 23 Python
Python之reload流程实例代码解析
Jan 29 Python
python对日志进行处理的实例代码
Oct 06 Python
使用python获取电脑的磁盘信息方法
Nov 01 Python
django 类视图的使用方法详解
Jul 24 Python
更新pip3与pyttsx3文字语音转换的实现方法
Aug 08 Python
python+mysql实现个人论文管理系统
Oct 25 Python
Python判断远程服务器上Excel文件是否被人打开的方法
Jul 13 Python
python利用线程实现多任务
Sep 18 Python
python中random.randint和random.randrange的区别详解
Sep 20 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
Nov 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
PHP迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
PHP 文件编程综合案例-文件上传的实现
2013/07/03 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
2011/03/30 Javascript
javascript列表框操作函数集合汇总
2013/11/28 Javascript
JavaScript实现存储HTML字符串示例
2014/04/21 Javascript
js数组与字符串的相互转换方法
2014/07/09 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
vue实现页面加载动画效果
2017/09/19 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
2019/05/16 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
layui 解决form表单点击无反应的问题
2019/10/25 Javascript
解决 window.onload 被覆盖的问题方法
2020/01/14 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
[01:02]DOTA2上海特锦赛SHOWOPEN
2016/03/25 DOTA
[01:04:02]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第二场 1月24日
2021/03/11 DOTA
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
2017/11/24 Python
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
python 简单照相机调用系统摄像头实现方法 pygame
2018/08/03 Python
如何利用python制作时间戳转换工具详解
2018/09/12 Python
利用Python检测URL状态
2019/07/31 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
Python基于字典实现switch case函数调用
2020/07/22 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
美国综合购物商城:UnbeatableSale.com
2018/11/28 全球购物
护理专业的自荐信
2013/10/22 职场文书
纪念建党演讲稿范文
2014/01/13 职场文书
中学生班主任评语
2014/01/30 职场文书
办公室文员自荐书
2014/02/03 职场文书
导游词之河北邯郸
2019/09/12 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle
python批量创建变量并赋值操作
2021/06/03 Python
pandas求平均数和中位数的方法实例
2021/08/04 Python
APP界面设计技巧和注意事项
2022/04/29 杂记