sudoku(数独)
来源:互联网 发布:淘宝客链接转换二维码 编辑:程序博客网 时间:2024/05/22 15:30
一、题目描述
游戏规则:
- 在 9 * 9 的宫格中,填写的数据为 1-9,每行不能重复,每列也不能重复,组成的9个小宫格中也不能重复。
如下图所示:
二、分析
从最上角(0,0)开始将81个宫格进行编号(0-80),通过转换可以将数字为所在行,所在列和所在小矩阵。也就是说,通过数字 n,我们可以计算出该数字映射到 9 * 9 宫格的位置。
行列:row = n / 9;col = n % 9;
小宫格:
行范围:(row / 3) * 3 ~(row / 3) * 3 + 3;
列范围:(col / 3) * 3 ~ (col / 3) * 3 + 3
三、代码
import java.util.*;public class Sudoku2 { static final int size = 9; static int[][] sudoku = new int[size][size]; static boolean flag; public static void main(String[] args) throws Exception{ // Scanner sc = new Scanner(new File("src/case/sudoku.txt")); Scanner sc = new Scanner(System.in); String line = ""; while(sc.hasNext()){ sc.next(); for(int i = 0;i < size;i++){ line = sc.next(); for(int j = 0;j < size;j++){ sudoku[i][j] = Character.getNumericValue(line.charAt(j)); } } flag = false; dfs(0); print(); } } // dfs static void dfs(int n){ if(n > 80 || flag){ flag = true; return; } if(sudoku[n / 9][n % 9] != 0){ dfs(n+1); if(flag){ return; } } else { for(int curNum = 1;curNum <= 9;curNum++){ if(isOk(n,curNum)){ sudoku[n / 9][n % 9] = curNum; dfs(n+1); if(flag){ return; } sudoku[n / 9][n % 9] = 0; } } } } // n : 0 - 80,枚举 1 - 9 static boolean isOk(int n,int curNUm){ int row = n / 9; // 当前行 int col = n % 9; // 当前列 for(int i = 0;i < size;i++){ if(sudoku[row][i] == curNUm){ return false; } if(sudoku[i][col] == curNUm){ return false; } } int x = (row / 3) * 3; // 子矩阵 int y = (col / 3) * 3; for(int i = x;i < x + 3;i++){ for(int j = y;j < y + 3;j++){ if(sudoku[i][j] == curNUm){ return false; } } } return true; } // 打印 static void print(){ for(int i = 0;i < size;i++){ for(int j = 0;j < size;j++){ System.out.print(sudoku[i][j]); } System.out.println(); } }}
阅读全文
0 0
- 谈谈数独(Sudoku)
- 数独(sudoku)实现
- PKU2676 Sudoku 数独
- poj2676 Sudoku 数独
- 数独(sudoku)C++
- POJ2676 Sudoku [数独]
- poj2676 Sudoku 数独
- Sudoku 数独
- 数独Sudoku
- sudoku(数独)
- POJ3074 sudoku数独
- 数独(SuDoku)介绍
- Sudoku Helper 数独助手
- poj 1676 sudoku 数独
- hdu1246 Sudoku Killer 数独
- poj2676(数独 sudoku)
- POJ 2676 Sudoku 数独
- 数独判断 Valid Sudoku
- macOS 下 Java 环境变量配置
- 终章-从0到1开启web前端学习之旅
- hdu 2586 How far away ?(lca-在线ST)
- 版本控制mercurial(hg)常用命令
- python实现随机生成列表,得到列表中位数并以此划分源列表
- sudoku(数独)
- 习题3-12 浮点数(Floating-Point Numbers, UVa11809)
- POJ 2367 topological_sort
- Git常用操作系列(1)
- 【剑指offer】面试题40:最小的k个数
- Python学习(六)——迭代、文件读写
- D
- 特征工程笔记(1)
- 视频网站上线测试了