9*9数独游戏

分析:

深搜:很常规的从行开始遍历,遍历到底后,移到下一列再次遍历其行。如果遇到无法填入的情况则放回上一级尝试其他可选数字。

样例

输入
005300000
800000020
070010500
400005300
010070006
003200080
060500009
004000030
000009700
输出
125346897
831467925
276918543
489625371
912873456
753291684
367584219
694752138
548139762

import java.util.Scanner;

public class _12dfs数独游戏 {
	//可以以/和%的方式让标记进行换行和换列
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		char[][] matrix = new char[9][9];
		for (int i = 0; i < 9; i++)
			matrix[i] = sc.next().toCharArray();
		dfs(matrix, 0, 0);
	}

	static void dfs(char[][] matrix, int i, int j) {
		if (i == 9) {
			for (int a = 0; a < 9; a++)
				System.out.println(matrix[a]);
			System.exit(0);
		}

		if (matrix[i][j] == '0') {
			for (int k = 1; k < 10; k++) {
				if (check(matrix, i, j, k + '0')) {
					matrix[i][j] = (char) (k + '0');// 确定当前状态
					dfs(matrix, i + (j + 1) / 9, (j + 1) % 9);// 转移到下一个状态
				}
			}
			matrix[i][j] = '0';// 回溯
		} else {
			dfs(matrix, i + (j + 1) / 9, (j + 1) % 9);// 转移下一个状态
		}
	}

	private static boolean check(char[][] matrix, int i, int j, int k) {
		// TODO Auto-generated method stub
		for (int a = 0; a < 9; a++)
			if (matrix[i][a] == k)
				return false;
		for (int a = 0; a < 9; a++)
			if (matrix[a][j] == k)
				return false;
		return true;
	}
}

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,我们可以使用IPywidgets库来创建一个9*9数独游戏。首先需要安装IPywidgets库,可以通过以下命令在终端中安装: ``` pip install ipywidgets ``` 然后,我们可以导入所需的库和模块,以及创建一个游戏板。 ```python import ipywidgets as widgets from IPython.display import display # Create game board game_board = [[0 for x in range(9)] for y in range(9)] ``` 接下来,我们可以创建一个函数来显示游戏板。这里我们使用`GridBox`来显示游戏板。 ```python def display_board(board): rows = [] for i in range(9): cols = [] for j in range(9): cols.append(widgets.IntText(value=board[i][j], description='', disabled=False)) rows.append(widgets.HBox(cols)) board = widgets.VBox(rows) display(board) ``` 然后,我们可以创建一个函数来检查游戏板上的数字是否合法。这里我们使用基本的数独规则:每行、每列和每个3x3的单元格中的数字必须是唯一的。 ```python def is_valid(board, row, col, num): # Check row for i in range(9): if board[row][i] == num: return False # Check column for i in range(9): if board[i][col] == num: return False # Check 3x3 box box_row = (row // 3) * 3 box_col = (col // 3) * 3 for i in range(3): for j in range(3): if board[box_row + i][box_col + j] == num: return False return True ``` 接下来,我们可以创建一个递归函数来解决数独游戏板。这里我们使用回溯算法来尝试在空单元格中填写数字,如果填写的数字无效,则回溯并尝试其他数字。 ```python def solve(board, row, col): if row == 9: return True if col == 9: return solve(board, row + 1, 0) if board[row][col] != 0: return solve(board, row, col + 1) for num in range(1, 10): if is_valid(board, row, col, num): board[row][col] = num if solve(board, row, col + 1): return True board[row][col] = 0 return False ``` 最后,我们可以创建一个函数来启动游戏。该函数创建一个按钮,单击该按钮将解决数独游戏板并将其显示在屏幕上。 ```python def start_game(b): solve(game_board, 0, 0) display_board(game_board) # Create start button button = widgets.Button(description="Start Game") button.on_click(start_game) display(button) ``` 现在,当单击“Start Game”按钮时,将解决数独游戏板并将其显示在屏幕上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值