国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python實現數獨游戲 java簡單實現數獨游戲

2020-01-04 15:28:29
字體:
來源:轉載
供稿:網友

 使用python和java實現數獨游戲,有比較才有收獲哦。

1、Python版

#--coding:utf-8--import randomimport itertoolsfrom copy import deepcopydef 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 boarddef 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 boarddef 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 challangeBoard = 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的兩倍。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长寿区| 邯郸市| 无锡市| 松滋市| 龙江县| 新河县| 光泽县| 凌海市| 武陟县| 都江堰市| 资兴市| 历史| 井冈山市| 竹山县| 天津市| 宜君县| 古交市| 剑河县| 沁阳市| 平塘县| 怀柔区| 利辛县| 清徐县| 北票市| 开化县| 高尔夫| 樟树市| 麦盖提县| 郴州市| 合肥市| 廊坊市| 额济纳旗| 敖汉旗| 赣州市| 高安市| 丹凤县| 洪江市| 乃东县| 衡水市| 策勒县| 汉沽区|