Poj 2676 Sudoku[dfs]

题目大意:

九宫格问题,也有人叫数独问题

把一个9行9列的网格,再细分为9个3*3的子网格,要求每行、每列、每个子网格内都只能使用一次1~9中的一个数字,即每行、每列、每个子网格内都不允许出现相同的数字。

0是待填位置,其他均为已填入的数字。

要求填完九宫格并输出(如果有多种结果,则只需输出其中一种)

如果给定的九宫格无法按要求填出来,则输出原来所输入的未填的九宫格

思路:

DFS 深搜

char map[10][10];/*数据存储*/
bool row[10][10];/*行存在数*/
bool col[10][10];/*列存在数*/
bool grid[10][10];/*格存在数*/

 

  1 /*poj2676 Sudoku*/
  2 #include <iostream>
  3 #include <cstdio>
  4 #include <cstring>
  5 using namespace std;
  6 
  7 char map[10][10];
  8 bool row[10][10];/*行存在数*/
  9 bool col[10][10];/*列存在数*/ 
 10 bool grid[10][10];/*格存在数*/
 11 
 12 bool dfs(int x, int y)
 13 {
 14     if(x == 10)
 15         return true;
 16     bool flag = false;
 17     if(map[x][y] - '0')
 18     {
 19         if(y == 9)
 20             flag = dfs(x+1, 1);
 21         else{
 22             flag = dfs(x, y+1);
 23         }
 24         if(flag)
 25             return true;
 26         else{
 27             return false;
 28         }
 29     }
 30     else{
 31         for(int i = 1; i<= 9; i++)
 32         {
 33             if(!row[x][i] && !col[y][i] && !grid[3*((x-1)/3) + (y-1)/3 + 1][i])
 34             {
 35                 map[x][y] = i+'0';
 36                 row[x][i] = true;
 37                 col[y][i] = true;
 38                 grid[3*((x-1)/3) + (y-1)/3 + 1][i] = true;
 39                 
 40                 if(y == 9)
 41                     flag = dfs(x+1, 1);
 42                 else{
 43                     flag = dfs(x, y+1);
 44                 }
 45                 if(!flag)
 46                 {
 47                     map[x][y] = '0';
 48                     row[x][i] = false;
 49                     col[y][i] = false;
 50                     grid[3*((x-1)/3) + (y-1)/3 + 1][i] = false;
 51                 
 52                 }
 53                 else{
 54                     return true;
 55                 }        
 56             }
 57         }
 58     }
 59     return false;
 60 }
 61 
 62 void judge()
 63 {
 64     memset(row, 0, sizeof(row));
 65     memset(col, 0, sizeof(col));
 66     memset(grid, 0, sizeof(grid));
 67 
 68     for(int i = 1; i<= 9; i++)
 69     {
 70         for(int j = 1; j<= 9; j++)
 71         {
 72             if(map[i][j] != '0')
 73             {
 74                 row[i][map[i][j]-'0'] = true;
 75                 col[j][map[i][j]-'0'] = true;
 76                 grid[3*((i-1)/3) + (j-1)/3 + 1][map[i][j]-'0'] = true;
 77             }
 78         }
 79     }
 80 /*    for(int i = 1; i<= 9; i++)
 81     {
 82         for(int j = 1; j<= 9; j++)
 83             cout<<grid[i][j];
 84         printf("\n");
 85     }
 86     printf("\n");    
 87 */    
 88 }
 89 
 90 void solve()
 91 {
 92     memset(map, 0, sizeof(map));
 93     for(int i = 1; i<= 9; i++)
 94     {
 95         gets(map[i] +1);
 96     }
 97     judge();
 98     dfs(1, 1);
 99     
100     for(int i = 1; i<= 9; i++)
101         puts(map[i] + 1);
102     printf("\n");
103 }
104 
105 int main()
106 {
107     int t;
108 //    freopen("test.txt", "r", stdin);
109     scanf("%d", &t);
110     getchar();
111     while(t--)
112     {
113         solve();
114     }
115     return 0;
116 }

 

转载于:https://www.cnblogs.com/ygdblogs/p/4929849.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十进制小数化为二进制小数的方法是什么_十进制转成二进制的两种方式

第一种&#xff1a;用2整除的方式。用2整除十进制整数&#xff0c;得到一个商和余数&#xff1b;再用2去除商&#xff0c;又会得到一个商和余数&#xff0c;如此重复&#xff0c;直到商为小于1时为止&#xff0c;然后把先得到余数作为二进制数的低位有效位&#xff0c;后得到的…

notes邮件正文显示不全_python实现一次性批量发邮件

在上次实现了批量修改文件名后&#xff08;链接&#xff1a;https://zhuanlan.zhihu.com/p/133727520&#xff09;&#xff0c;又拿来了同事编写的一次性批量发邮件小程序&#xff0c;小编每月向分公司发数据任务算是基本上实现了自动化 需要新建2个.py文件实现&#xff0c;一个…

用python画五角星中心颜色不同_画个五角星让它绕中心点旋转

李兴球Python画个五角星绕中心点旋转 画一个五角星让它旋转起来,这在Python中有几个方案可选,这里提供一个不是用自定义形状的方案,以下是部分源代码, 其实关键的代码函数&#xff0c;也就是starpoints这个函数&#xff0c;它是核心。代码已经给你了。接下来就看你的聪明才智了…

Subsets

我的思路&#xff1a;二进制位上有1则加 class Solution { public:vector<vector<int>> subsets(vector<int>& nums) {vector<vector<int>> res;sort(nums.begin(),nums.end());for(int i0;i<pow(2,nums.size());i){vector<int> pa…

oracle 建表id自增长_oracle 左连接、右连接、全外连接、内连接、以及 (+) 号用法...

Oracle中的连接可分为&#xff0c;内连接(INNER JOIN)、外连接(OUTER JOIN)、全连接(FULL JOIN)&#xff0c;不光是 Oracle&#xff0c;其他很多的数据库也都有这3种连接查询方式。Oracle 外连接(OUTER JOIN)&#xff0c;又分为左外连接和右外连接&#xff0c;即左连接和右连接…

匿名函数自我调用_Python中的匿名函数及递归思想简析

匿名函数前言上次咱们基本说了一下函数的定义及简单使用&#xff0c;Python中的基本函数及其常用用法简析&#xff0c;现在咱们整点进阶一些的。同样都是小白&#xff0c;咱也不知道实际需要不&#xff0c;但是对于函数的执行顺序以及装饰器的理解还是很有必要的。首先咱们先简…

python-pass

Python pass是空语句&#xff0c;是为了保持程序结构的完整性。 passass 不做任何事情&#xff0c;一般用做占位语句。 Python 语言 pass 语句语法格式如下&#xff1a; pass 实例&#xff1a; #!/usr/bin/python # -*- coding: UTF-8 -*- # 输出 Python 的每个字母 for letter…

java解析dxf文件_浅析JVM方法解析、创建和链接

一&#xff1a;前言上周末写了一篇文章《你知道Java类是如何被加载的吗&#xff1f;》&#xff0c;分析了HotSpot是如何加载Java类的&#xff0c;干脆趁热打铁&#xff0c;本周末再来分析下Hotspot又是如何解析、创建和链接类方法的。二&#xff1a;Class文件中的Java方法Java类…

python解释器的提示符是shell嘛_python解释器怎么运行

python解释器怎么运行&#xff1f; 在Python可用的机器上&#xff0c;Python解释器通常放在 /usr/local/bin/python3.7 ; 把 /usr/local/bin 放到你 Unix shell 的搜索路径当中 , 这样就能键入命令:python3.7 就能运行了。安装时可以选择安装目录&#xff0c;所以解释器也可能在…

我的iOS学习历程 - OC第九天

今天主要讲的是内存的管理方法 1.IOS的内存管理中 Mac是使用的垃圾回收(gc) 有轮询延迟 手机用的是 引用计数 2.引用计数的方法: ( 1 ) alloc alloc 开辟空间引用计数 从0 ->1 Person *p1 [[Person alloc]initWithName:"wanglong" age:18]; ( 2 ) retainretain 使…

判断运营商_三大通信运营商步调一致,大流量互联网套餐陆续成绝版

此前笔者就发过一篇文章“预警”三大通信运营商的大流量互联网资费套餐面临调整&#xff0c;很可能一直流行的200G定向流量套餐都将会大幅缩减&#xff0c;不过未引起大家的注意。当初的判断&#xff0c;是基于卡商渠道和内部传言消息分析&#xff0c;同时也基于此前通信运营商…

python实现图形旋转_Python3+OpenCV2实现图像的几何变换

几何变换可以看成图像中物体&#xff08;或像素&#xff09;空间位置改变&#xff0c;或者说是像素的移动。 几何运算需要空间变换和灰度级差值两个步骤的算法&#xff0c;像素通过变换映射到新的坐标位置&#xff0c;新的位置可能是在几个像素之间&#xff0c;即不一定为整数坐…

【LINUX/UNIX网络编程】之使用消息队列,信号量和命名管道实现的多进程服务器(多人群聊系统)...

RT&#xff0c;使用消息队列&#xff0c;信号量和命名管道实现的多人群聊系统。 本学期Linux、unix网络编程的第三个作业。 先上实验要求&#xff1a; 实验三 多进程服务器 【实验目的】 1、熟练掌握进程的创建与终止方法&#xff1b; 2、熟练掌握进程间通信方法&#xff1b; …

图像 pipeline_多面体优化,Pipeline与深度学习编译器

有幸参与了MICRO2020&#xff0c;见识到了很多优秀的论文&#xff0c;其中最让我惊艳的是华为的在多面体优化上做优化的文章 <Optimizing the Memory Hierarchy by Compositing Automatic Transformations on Computations and Data>&#xff08;https://www.di.ens.fr/~…

python不同数据的读入_python读写不同编码txt文件_python读写txt文件

python读写不同编码txt文件_python读写txt文件 以后整理规范 [python] view plaincopy import os import codecs filenamesos.listdir(os.getcwd()) outfile(“name.txt”,“w”) for filename in filenames: out.write(filename.decode(“gb2312”).encode(“utf-8”)) out.cl…

Java06动手动脑

1. 子类的构造函数如果要引用super的话&#xff0c;必须把super放在函数的首位如果想用super继承父类构造的方法&#xff0c;但是没有放在第一行的话&#xff0c;那么在super之前的语句&#xff0c;肯定是为了满足自己想要完成某些行为的语句&#xff0c;但是又用了super继承父…

rs485接口上下拉_RS485接口EMC电路设计方案

一、原理图1. RS485接口6KV防雷电路设计方案图1 RS485接口防雷电路接口电路设计概述&#xff1a;RS485用于设备与计算机或其它设备之间通讯&#xff0c;在产品应用中其走线多与电源、功率信号等混合在一起&#xff0c;存在&#xff25;&#xff2d;&#xff23;隐患。本方案从…

python可以在linux运行_服务器(Linux)上运行python总结

跑实验换了几次服务器了&#xff0c;每次遇到相似问题都要重新百度&#xff0c;而且每次百度搜索出的顺序都不一样&#xff0c;又得重新找半天&#xff0c;这次把遇到的问题都总结一下。 1.准备 PuTTY和FileZilla FileZilla使用FTP传输时&#xff0c;实验室的服务器可能是出于安…

第九周(11.02-11.08)学习笔记

一、学习目的 掌握系统编程和系统调用的概念掌握系统编程错误处理的方式掌握Unix/Linux系统级I/O:open close read write seek stat 4. 掌握RIO掌握I/O重定向的方法二、学习资源 教材&#xff1a;附录A&#xff0c;第10章《系统级I/O》课程资料&#xff1a;https://www.shiyanl…

bootice 此功能仅在uefi环境下可用_电脑新手必掌握基础知识:BIOS、EFI与UEFI详解!...

本文估计很多小白看不懂&#xff0c;但是还是建议你硬着头皮看完&#xff0c;这篇文章主要讲解了这几种“BIOS”的启动方式&#xff0c;对电脑启动问题判断的理解会有益处。BIOS是个程序&#xff0c;存储在BIOS芯片中&#xff0c;而现在的新式电脑用的基本都是UEFI启动&#xf…