poj 3074 Sudoku

2023-11-09

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 7613   Accepted: 2696

Description

In the game of Sudoku, you are given a large 9 × 9 grid divided into smaller 3 × 3 subgrids. For example,

. 2 7 3 8 . . 1 .
. 1 . . . 6 7 3 5
. . . . . . . 2 9
3 . 5 6 9 2 . 8 .
. . . . . . . . .
. 6 . 1 7 4 5 . 3
6 4 . . . . . . .
9 5 1 8 . . . 7 .
. 8 . . 6 5 3 4 .

Given some of the numbers in the grid, your goal is to determine the remaining numbers such that the numbers 1 through 9 appear exactly once in (1) each of nine 3 × 3 subgrids, (2) each of the nine rows, and (3) each of the nine columns.

Input

The input test file will contain multiple cases. Each test case consists of a single line containing 81 characters, which represent the 81 squares of the Sudoku grid, given one row at a time. Each character is either a digit (from 1 to 9) or a period (used to indicate an unfilled square). You may assume that each puzzle in the input will have exactly one solution. The end-of-file is denoted by a single line containing the word “end”.

Output

For each test case, print a line representing the completed Sudoku puzzle.

Sample Input

.2738..1..1...6735.......293.5692.8...........6.1745.364.......9518...7..8..6534.
......52..8.4......3...9...5.1...6..2..7........3.....6...1..........7.4.......3.
end

Sample Output

527389416819426735436751829375692184194538267268174593643217958951843672782965341
416837529982465371735129468571298643293746185864351297647913852359682714128574936

Source

题目大意
数独
dfs加状压
然后搜索时每次找可能性最小的
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
const int tmp[9][9] = {{0,0,0,1,1,1,2,2,2},
					   {0,0,0,1,1,1,2,2,2},
					   {0,0,0,1,1,1,2,2,2},
					   {3,3,3,4,4,4,5,5,5},
					   {3,3,3,4,4,4,5,5,5},
					   {3,3,3,4,4,4,5,5,5},
					   {6,6,6,7,7,7,8,8,8},
					   {6,6,6,7,7,7,8,8,8},
				 	   {6,6,6,7,7,7,8,8,8}};
int Int(){
    char ch;int tmp = 0;
    while (ch = getchar()) if (ch >= '0' && ch <='9') break;
    for (; ch >= '0' && ch <= '9'; ch = getchar()) tmp = tmp * 10 + ch - '0';
	return tmp;
}
int tmp1[9], tmp2[9], tmp3[9];
int a[9][9];
int ans[9][9];
bool ok;
int num[1 << 12];
void init(){
	memset(tmp1, 0, sizeof(tmp1));
	memset(tmp2, 0, sizeof(tmp2));
	memset(tmp3, 0, sizeof(tmp3));
	memset(ans, 0, sizeof(ans));
	memset(a, 0, sizeof(a));
	ok = false;
	for (int i = 0; i < 9; i ++)
		for (int j = 0; j < 9; j ++){
			char ch = 0;
			while (ch = getchar()){
				if ((ch >= '0' && ch <= '9') || ch == '.') break;
				if (ch == 'e') exit(0);
			}
			if (ch != '.') a[i][j] = ch - '0';
			if (a[i][j]){
				ans[i][j] = a[i][j];
				tmp1[i] ^= (1 << a[i][j] - 1);
				tmp2[j] ^= (1 << a[i][j] - 1);
				tmp3[tmp[i][j]] ^= (1 << a[i][j] - 1);
			}
		}
}
int find_next(int &x, int &y){
	x = 9, y = 0;
	int mini = 99999;
	for (int i = 0; i < 9; i ++)
		for (int j = 0; j < 9; j ++)
			if (ans[i][j] == 0 && num[(511 ^ tmp1[i]) & (511 ^ tmp2[j]) & (511 ^ tmp3[tmp[i][j]])] < mini){
				x = i, y = j;
				mini = num[(511 ^ tmp1[i]) & (511 ^ tmp2[j]) & (511 ^ tmp3[tmp[i][j]])];
			}
}
void dfs(int x, int y){
	if (ok)return;
	if (a[x][y]){
		int xx = 0, yy = 0;
		find_next(xx, yy); 
		dfs(xx, yy);
		return;
	}
	if (x == 9 && y == 0){
		for (int i = 0; i < 9; i ++){
			for (int j = 0; j < 9; j ++)
				cout <<ans[i][j] ;	
		}
		cout <<endl;
		ok = true;
		return;
	}
	for (int i = 1; i <= 9; i ++)
		if (!(tmp1[x] & (1 << i - 1)) && !(tmp2[y] & (1 << i - 1)) && !(tmp3[tmp[x][y]] & (1 << i - 1))){
			ans[x][y] = i;
			tmp1[x] ^= (1 << i - 1);
			tmp2[y] ^= (1 << i - 1);
			tmp3[tmp[x][y]] ^= (1 << i - 1);
			int xx = 0, yy = 0;
			find_next(xx, yy); 
			dfs(xx, yy);
			ans[x][y] = 0;
			tmp1[x] ^= (1 << i - 1);
			tmp2[y] ^= (1 << i - 1);
			tmp3[tmp[x][y]] ^= (1 << i - 1);
		}	
}
int main(){
	for (int i = 0; i <= 512; i ++)
		for (int j = 0; j < 9; j ++)
			if (i & (1 << j)) num[i] ++;
	while (1){ 
		init();
		dfs(0, 0);
	}
	return 0;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

poj 3074 Sudoku 的相关文章

  • Maximum Diameter Graph 【CodeForces - 1082D】【搜索+构造】

    题目链接 一开始忘记输出有多少条边 WA了好几发都跑不过第一组测试样例 开始怀疑自己是不是读了道假题 然后在大佬们的帮助下 终于AC 好伤心 读假样例 一定是我太弱了 我的思想是采用了树链剖分的dfs 构造思想 可能是因为最近少用了树链剖分
  • 决策数算法进阶:属性测试条件、最佳划分度量、过拟合现象的处理

    我们在先前博文中已经简要介绍了决策树的思想和几个经典算法来构造决策树 决策树算法简介及其MATLAB实现代码 今天我们要针对决策树继续深入探讨一些的问题 目录如下 目录 一 表示属性测试条件的方法 二 选择最佳划分的度量 三 处理决策树归纳
  • 基础算法题——德邦国王(dfs、剪枝)

    德邦国王 题目还算中规中矩 就是剪枝比较麻烦 解题思路 dfs 剪枝 移动次数不超过设定值 M 若有解 则后面的步骤不可大于该解的值 不断查询完美矩阵与当前矩阵不同的个数 t t 1 为最快可将当前矩阵移动成完美矩阵的步数 若 t 1 已经
  • UVA12166 Equilibrium Mobile

    VJ传送门 一道思维题 刚开始看的时候没什么思路 在博客园上参考了大佬的解析 在这里总结一下 一 分析 这道题要求让天平平衡所需要的最小改动次数 至少有一个不变 我们可以先选定一个不变的基准 然后改变其他的秤砣 得到以此为基准的天平的总重量
  • 02 二叉树的DFS(前序、中序或后序遍历实现)【Binary Tree 二叉树】

    二叉树的深度优先遍历主要有三种 前序 根左右 中序 左根右 后序 左右根 下面是完整的实现和讲解 include
  • [LeetCode] Binary Tree Level Order Traversal 二叉树层次遍历(DFS

    目录 1 Binary Tree Level Order Traversal 二叉树层次遍历 BFS 2 Binary Tree Level Order Traversal II 二叉树层次遍历从低往高输出 BFS 3 Maximum De
  • 【100%通过率 】【华为OD机试 c++/python】查找单入口空闲区域【 2023 Q1

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 给定一个 m x n 的矩阵 由若干字符 X 和 O 构成 X 表示该处已被占据 O 表示该处空闲 请找到最大的单入口空闲区域 解释 空闲区域是
  • 机器学习——决策树剪枝

    目录 一 决策树剪枝策略 1 1剪枝目的 1 2剪枝策略 1 3判断决策树泛化性能是否提升的方法 二 预剪枝 prepruning 2 1概述 2 2预剪枝优缺点 2 3代码实现 三 后剪枝 postpruning 3 1概述 3 2后剪枝
  • 全排列 Ⅱ--回溯算法

    LeetCode 全排列 给定一个可包含重复数字的序列 返回所有不重复的全排列 示例 输入 1 1 2 输出 1 1 2 1 2 1 2 1 1 解法 回溯法 解题思路 思路很简单 因为要全排列 所以每一个数字都可能选择 即选择区间为 0
  • 深度优先搜索算法(DFS)原理及示例详解

    目录 1 算法原理 2 基本思路 980 不同路径 题目描述 输入输出示例 直观思路 代码实现 1 算法原理 事实上 深度优先搜索属于图算法的一种 英文缩写为DFS即Depth First Search 其过程简要来说是对每一个可能的分支路
  • linux下载安装搭建、卸载FastDfs文件服务器、配置多存储路径(轮询、最大内存选择)、nginx反向代理实现图片预览、常用命令

    linux下载安装搭建 卸载FastDfs文件服务器 配置多存储路径 轮询 最大内存选择 nginx反向代理实现图片预览 常用命令 Springboot整合Fastdfs上传图片 缩略图 下载文件 需求 文件转存方案 springboot整
  • 图的深度优先遍历:DFS遍历

    图的深度优先遍历 DFS遍历 提示 系列图的文章 提示 大厂笔试面试都可能不咋考的数据结构 图 由于图的结构比较难 出题的时候 很难把这个图的数据搞通顺 而且搞通顺了题目也需要耗费太多时间 故笔试面试都不会咋考 笔试大厂考的就是你的贪心取巧
  • L2-2 病毒溯源 (25 分)(Dfs详细解析)

    病毒容易发生变异 某种病毒可以通过突变产生若干变异的毒株 而这些变异的病毒又可能被诱发突变产生第二代变异 如此继续不断变化 现给定一些病毒之间的变异关系 要求你找出其中最长的一条变异链 在此假设给出的变异都是由突变引起的 不考虑复杂的基因重
  • 每天进步一点点【图的深度优先遍历(DFS)】

    图是一种数据结构 其中节点可以具有零个或多个相邻元素 两个节点之间的连接称为边 节点也可以称为顶点 图分为三种 无向图 有向图 带权图 图的表示方式有两种 二维数组表示 邻接矩阵 链表表示 邻接表 邻接矩阵 邻接矩阵是表示图形中顶点之间相邻
  • 深度、广度优先搜索

    文章目录 二 图的遍历 2 1 深度优先搜索 DFS DFS森林 应用 2 2 广度优先搜索 BFS 基本操作 应用 二 图的遍历 2 1 深度优先搜索 DFS DFS森林 Vertextype GetVex ALGraph G int v
  • 【论文翻译】边缘应用中加速卷积神经网络的剪枝算法综述

    摘要 随着卷积神经网络 CNN 模型大小的增加 模型压缩和加速技术对于在边缘设备上部署这些模型变得至关重要 在本文中 我们对修剪进行了全面的调查 这是一种主要的压缩策略 可以从CNN模型中删除非关键或冗余的神经元 调查涵盖了修剪的总体动机
  • 【算法】深度优先搜索DFS 入门:基本知识+经典例题

    DFS最重要的是理清搜索顺序 ps 这是我入门dfs时写的博客 后来dfs渐渐熟练了 也补充了一些题目上去 带原题和代码 个人感觉整篇博文从上到下确实由易到难 代码也由开始的冗长变得渐渐精简 自学DFS看的视频 小甲鱼 讲原理 青岛大学 王
  • POJ 2676 Sudoku 数独(dfs)

    POJ 2676 Sudoku 数独 dfs Sudoku is a very simple task A square table with 9 rows and 9 columns is divided to 9 smaller squ
  • 无向图染色问题-dfs剪枝

    无向图染色问题 问题描述 给定一个无向图 要求用最少的颜色将节点染色 限制是不能让相邻节点染上相同的颜色 算法 使用dfs 为节点分配不同的颜色进行尝试 计算每种分配所需的颜色数 最终进行回溯 取得最小的颜色数 代码 C include
  • 基于振动传感器数据构建预测性维护AI模型

    预测性维修 Predictive Maintenance 简称PdM 是以状态为依据 Condition Based 的维修 在机器运行时 对它的主要 或需要 部位进行定期 或连续 的状态监测和故障诊断 判定装备所处的状态 预测装备状态未来

随机推荐

  • PHP文件包含漏洞代码分析-通过漏洞getshell-学习笔记

    一 原理分析 文件包含漏洞是代码注入的一种 其原理就是注入一段用户能控制的脚本或代码 并让服务器端执行 代码注入的典型代表就是文件包含 File inclusion 文件包含可能会出现在jsp php asp等语言中 服务器通过函数去包含任
  • Python笔记4

    迭代器 迭代是Python最强大的功能之一 是访问集合元素的一种方式 迭代器是一个可以记住遍历的位置的对象 迭代器对象从集合的第一个元素开始访问 直到所有的元素被访问完结束 迭代器只能往前不会后退 迭代器有两个基本的方法 iter 和 ne
  • css flex布局 —— 项目属性 align-self

    align self属性定义 flex 子项单独在侧轴 纵轴 方向上的对齐方式 可覆盖 align items 属性 默认值为 auto 表示继承父元素的 align items 属性 如果没有父元素 则等同于 stretch 语法 ite
  • 实战--Kafka入门(一)

    问题导读 1 如何理解消息队列 MessageQueue 2 如何解析Kafka基础架构 3 如何安装Kafka集群 4 Kafka命令行操作有哪些 第1章 Kafka概述1 1定义 Kafka是一个分布式的基于发布 订阅模式的消息队列 主
  • 关于野指针的一些问题与总结

    void Test void char str char malloc 100 strcpy str hello free str if str NULL strcpy str world printf str 请问运行Test函数会有什么
  • 在闲鱼上卖什么东西比较赚钱?

    在闲鱼上卖什么东西比较赚钱 这牵扯做闲鱼的一个关键问题 选品 可以这么说 会选品 选好品 就成功了一半 剩下的一半 一半交给技术 另一半交给运气 怎么选品 要遵循下面几个原则 第一 做实物 但不要做食物 不要去做虚拟产品 也不要去做生鲜食物
  • 查看YOLO的模型大小和参数量的三种方式

    查看YOLO的模型大小和参数量的三种方式 1 使用Darknet YOLO的原始实现 2 使用Python和深度学习库 3 使用PyTorch 要查看YOLO模型的大小和参数量 你可以使用相关的深度学习库和工具 比如TensorFlow P
  • Centos7/SSH Weak Key Exchange Algorithms Enabled/SSH Server CBC Mode Ciphers Enabled

    SSH Weak Key Exchange Algorithms Enabled SSH Server CBC Mode Ciphers Enabled https knowledge broadcom com external artic
  • 中文乱码解决大全

    一 Java中文问题的由来 Java的内核和class文件是基于unicode的 这使Java程序具有良好的跨平台性 但也带来了一些中文乱码问题的麻烦 原因主要有两方面 Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交
  • data must not be longer than 256 bytes

    1 问题 在进行 RSA 解密时候报错 data must not be longer than 256 bytes 2 分析 RSA加解密算法通常有两种不同的方式 是使用对称密钥 比如 AES DES等加解密方法 加密数据 然后使用非对称
  • JSP简单练习-一个简单的计数器

    在JSP中 在 之间书写的程序代码成为java程序片 一个JSP页面中可以有多个java程序片 要注意的是 在Java程序片中声明的变量在它们所在JSP页面的所用程序片及表达式中都有效 基于此 可以把一个较大的程序片分成几个小的程序片 还可
  • python 作图中的图标题title 和坐标轴标签的axes的调整

    这里主要是调整title和坐标轴标签的样式 要注意抓住设定的套路和规律 不要被复杂的外表所迷惑 import matplotlib pyplot as plt import numpy as np from matplotlib impor
  • C# HttpWebRequest 获取 HTTPS 网页内容

    在 C 中 可以使用 HttpWebRequest 类来获取 HTTPS 网页内容 需要注意的是 HTTPS 网页采用了 SSL TLS 加密传输机制 必须在发送请求之前获取服务器端的证书并进行验证才能成功获取网页内容 下面是一份示例代码
  • js--纯js实现省市地区三级联动

    QQ自己的JS省市区三级联动 已验证 使用引用外部JS来实现三级联动的 JS如下 http ip qq com js geo js
  • CPU是如何工作的

    晶体管到门电路 二极管的工作 相信大家都知道二极管的工作特性 那如何使用二极管去构建一个门电路呢 二极管的与门 上拉电阻 只有AB同时为高电平 输出为高电平 二极管的或门 下拉电阻 只要AB任一一个为高电平 输出为高电平 MOS管的工作 在
  • 初学React,制作案例页面1

    通过node搭建开发环境 先下载node并安装 然后在cmd中用npm命令下载react脚手架 我选择了react bootstrap作为UI框架 所以也在cmd中下载react bootstrap资源包 npm install g cre
  • C++ - 成员函数(member function)模板(template) 详解 及 代码

    成员函数 member function 模板 template 详解 及 代码 本文地址 http blog csdn net caroline wendy article details 16918085 成员模板 member tem
  • Flink Table API 与 Flink SQL 实现Kafka To Kafka 版本1.12

    Table API版本 0 前提 1 创建流和表执行环境 2 连接Source并创建Table 3 筛选Table对象中的数据 4 连接Sink并创建临时表 5 将Table对象写入临时表 测试 杠精打住 SQL 版本 最近有铁汁问我 一闪
  • leetcode 第 1025 题:除数博弈(C++)

    1025 除数博弈 力扣 LeetCode 第一反应是动态规划 f i 是否为true取决于在 0 i 之间能否找到一个因数j使得f i j 为false 也就是能否找到一个因数使得鲍勃必败 class Solution public bo
  • poj 3074 Sudoku

    Time Limit 1000MS Memory Limit 65536K Total Submissions 7613 Accepted 2696 Description In the game of Sudoku you are giv