首页/心系八方/正文
递归回溯算法求解数独:9×9盘面数字推理游戏求解思路

 2025年04月10日  阅读 13

摘要:[[id_[[]5816]][[]]4002]]“数独”是一种智力游戏。通常认为它起源于“正交拉丁方”。经日本人推广后,在全球范围内迅速流行起来。如下图所示,这是一个数独的示例。玩家要依据9×9盘面上的已知数字,通过推理得出所有剩余空格的数字。同时,要满...

[[id_[[]5816]][[]]4002]]

“数独”是一种智力游戏。通常认为它起源于“正交拉丁方”。经日本人推广后,在全球范围内迅速流行起来。如下图所示,这是一个数独的示例。玩家要依据 9×9 盘面上的已知数字,通过推理得出所有剩余空格的数字。同时,要满足每一行、每一列以及每一个同色九宫内的数字都包含 1 到 9 且不重复的条件。

数独的答案一般都是唯一的,如果有多个解也称为无解。

思路:原题目要求我们进行递归操作。然而,我们可以偷懒,因为写出递归代码后,就能写出非递归代码,还可以使用深度优先搜索(dfs)的暴力方法,从左到右、从上往下开始进行搜索。

import java.util.Scanner;
public class c3_3 {
	public static int[][] qp = new int[9][9];
	public static Boolean t = false;
	
	public static void main(String[] args) {
		请提供需要改写的句子呀,你没有给出具体的内容呢。
		int[][] qp = new int[9][9];
		//初始化矩阵
		chushi();
		dfs(0,0);
		
	}
	
	
	private static void dfs(int x, int y) {
		if(x==9 || y == 9) {
			return;
		}
		//判断是否棋盘给了初始值
		if(qp[x][y] != 0) {
			if(y==8) {
				dfs(x+1, 0);
			}else {
				dfs(x, y+1);
			}
		}else {
			//暴力
			for(int i = 1; i < 10; i++) {
				if(panduan(x,y,i)) {
					qp[x][y] = i;
					输出括号内 x 与 y 用逗号分隔的字符串,接着输出冒号,再输出二维数组 qp 中 x 和 y 位置的元素。
					if(x == 8 && y == 8) {
						t = true;
						for(int a = 0; a < 9; a++) {
							for(int b = 0; b < 9; b++) {
								System.out.print(qp[a][b]+" ");
							}
							System.out.println();
						}
						return;
					}
					if(y==8) {
						dfs(x+1, 0);
						qp[x][y] = 0;
					}else {
						dfs(x, y+1);
						qp[x][y] = 0;
					}
				}
				if(t) {
					return;
				}
			}
		}
		return;
	}
	

九宫数独题目大全_九宫数独游戏_九宫数独游戏技巧讲解

private static boolean panduan(int x, int y, int z) { //横向判断 for(int i = 0; i < 9; i++) { if(qp[x][i] == z) { return false; } } //纵向判断 for(int i = 0; i < 9; i++) { if(qp[i][y] == z) { return false; } } //同一个方格判断 if(x >= 0 && x < 3) { if(y >= 0 && y < 3) { for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { if(qp[i][j] == z) { return false; } } } }else if(y >= 3 && y < 6){ for(int i = 0; i < 3; i++) { for(int j = 3; j < 6; j++) { if(qp[i][j] == z) { return false; } } } }else { for(int i = 0; i < 3; i++) { for(int j = 6; j < 9; j++) { if(qp[i][j] == z) { return false; } } } } }else if(x >= 3 && x < 6) { if(y >= 0 && y < 3) { for(int i = 3; i < 6; i++) { for(int j = 0; j < 3; j++) { if(qp[i][j] == z) { return false; } } } }else if(y >= 3 && y < 6){ for(int i = 3; i < 6; i++) { for(int j = 3; j < 6; j++) { if(qp[i][j] == z) { return false; } } } }else { for(int i = 3; i < 6; i++) { for(int j = 6; j < 9; j++) { if(qp[i][j] == z) { return false; } } } } }else { if(y >= 0 && y < 3) { for(int i = 6; i < 9; i++) { for(int j = 0; j < 3; j++) { if(qp[i][j] == z) { return false; } } } }else if(y >= 3 && y < 6){ for(int i = 6; i < 9; i++) { for(int j = 3; j < 6; j++) { if(qp[i][j] == z) { return false; } } } }else { for(int i = 6; i < 9; i++) { for(int j = 6; j < 9; j++) { if(qp[i][j] == z) { return false; } } } } } return true; } private static void chushi() { qp[0][2] = 5; qp[0][3] = 3; qp[1][0] = 8; qp[1][7] = 2; qp[2][1] = 7; qp[2][4] = 1; qp[2][6] = 5; qp[3][0] = 4; qp[3][5] = 5; qp[3][6] = 3; qp[4][1] = 1; qp[4][4] = 7; qp[4][8] = 6; qp[5][2] = 3; qp[5][3] = 2; qp[5][7] = 8; qp[6][1] = 6; qp[6][3] = 5; qp[6][8] = 9; qp[7][2] = 4; qp[7][7] = 3; qp[8][5] = 9; qp[8][6] = 7; } }

版权声明:本文为 “博览广文网” 原创文章,转载请附上原文出处链接及本声明;

原文链接:http://wen.bjhwtx.com/post/18473.html

标签:

博览广文网

博览广文网为所有文学爱好者、新闻爱好者、关注生活多方面内容的观众朋友提供多方位的内容呈现、提升阅读空间、填充碎片时间,开阔读者的视野、增长见识、了解民生、一个让您不出户尽知天下事的网站平台!
热门标签
关于我们
广文舒阅网—让天下读者有家可归!这里汇聚了各类优质文化信息,无论是全球热点、历史故事,还是实用百科、趣味探索,您都能轻松获取。我们希望用阅读点亮您的世界,让每一次浏览都充满收获和乐趣。
导航栏A标题
广文舒阅网
扫码关注
联系方式
全国服务热线:0755-88186625
Q Q:8705332
Email:admin@lanyu.com
地址:深圳市福田区海雅缤纷国际大厦5层501
Copyright 深圳市蓝宇科技有限公司 版权所有 备案号:京ICP备20013102号-1