题目描述 Description

“芬兰数学家因卡拉,花费3个月时间设计出了世界上迄今难度最大的数独游戏,而且它只有一个答案。因卡拉说只有思考能力最快、头脑最聪明的人才能破解这个游戏。”这是英国《每日邮报》2012年6月30日的一篇报道。这个号称“世界最难数独”的“超级游戏”,却被扬州一位69岁的农民花三天时间解了出来。

看到这个新闻后,我激动不已,证明我们OI的实力的机会来了,我们虽然不是思考能力最快、头脑最聪明的人,但是我们可以保证在1s之内解题。

好了废话不多说了……

数独是一种填数字游戏,英文名叫Sudoku,起源于瑞士,上世纪70年代由美国一家数学逻辑游戏杂志首先发表,名为Number Place,后在日本流行,1984年将Sudoku命名为数独,即“独立的数字”的省略,解释为每个方格都填上一个个位数。2004年,曾任中国香港高等法院法官的高乐德(Wayne Gould)把这款游戏带到英国,成为英国流行的数学智力拼图游戏。

  玩家需要根据9×9盘面上的已知数字,推理出所有剩余位置(数据表示为数字0)的数字,并满足每一行、每一列、每一个粗线宫内的数字均含1-9,不重复。

现在给你一个数独,请你解答出来。每个数独保证有解且只有一个。

输入描述 Input Description

9行9列。

每个数字用空格隔开。0代表要填的数

行末没有空格,末尾没有回车。

输出描述 Output Description

输出答案。

排成9行9列。

行末没有空格,结尾可以有回车。

样例输入 Sample Input

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

样例输出 Sample Output

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

数据范围及提示 Data Size & Hint

保证有解,每个数独都由<a href="http://oubk.com/">http://oubk.com</a>数独网提供。

其中数据hard1.in为芬兰数学家提供。

思路:我先说一下,做完这个题后,我终于会填数独了233。
思路也是比较简单的吧,只不过我没有想到具体的实现方法,于是就老老实实的看题解,然后总结了一个比较简洁的写法。
首先,我们令bool数组row[x][v]表示第x行是否存在v这个数,col[y][v]表示第y列是否存在v这个数,由于题目要求,同一个3*3的小格子里不能出现相同的数,所以我们又令gz[i][j][v]表示第i大行的格子第j大列的格子是否存在v这个数,然后就很简单了,枚举每一行,有空位就枚举1到9所有数字,看看当前状态可不可行,可行就dfs下一层。当当前行格子已被放满,那么就去下一行。如果所有格子都被填满,那么直接输出答案,并直接退出程序(因为题目保证,一定存且仅存一组解)。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
const int maxn=12;
int read()
{int ret=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9'){ret=ret*10+c-'0';c=getchar();}return ret*f;
}
int n,mmp[maxn][maxn];
bool row[maxn][maxn],col[maxn][maxn],gz[4][4][maxn];
inline void place(int x,int y,int v,bool t)
{row[x][v]=t,col[y][v]=t;gz[(x-1)/3][(y-1)/3][v]=t;
}
int res=81;
void dfs(int x,int y,int step)
{if(step==res){for(int i=1;i<=9;i++){    for(int j=1;j<=9;j++)printf("%d ",mmp[i][j]);printf("\n");}exit(0);}int flag=0;for(int i=y;i<=9;i++)if(!mmp[x][i]) {y=i;flag=1;break;}if(flag){for(int i=1;i<=9;i++){if(row[x][i]||col[y][i]||gz[(x-1)/3][(y-1)/3][i]) continue;mmp[x][y]=i;place(x,y,i,1);dfs(x,y,step+1);mmp[x][y]=0;place(x,y,i,0);}}else dfs(x+1,1,step);
}
int main()
{for(int i=1;i<=9;i++)for(int j=1;j<=9;j++){mmp[i][j]=read();if(mmp[i][j]){place(i,j,mmp[i][j],1);res--;}}dfs(1,1,0);return 0;
}

转载于:https://www.cnblogs.com/loi-frank/p/7727006.html

codevs 2924 数独挑战相关推荐

  1. codevs 2924 数独挑战 x(三种做法+超详细注释~)

    2924 数独挑战  时间限制: 1 s  空间限制: 1000 KB  题目等级 : 钻石 Diamond 题目描述 Description "芬兰数学家因卡拉,花费3个月时间设计出了世界 ...

  2. codevs 2924 数独挑战(dfs)

    *PS:神级数独作弊器QWQ... go to the problem 题目描述 Description "芬兰数学家因卡拉,花费3个月时间设计出了世界上迄今难度最大的数独游戏,而且它只有一 ...

  3. codevs 2924 数独

     数独挑战 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codevs.cn/problem/2924/ Description "芬 ...

  4. codevs2924 数独挑战

    2924 数独挑战 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description "芬兰数学家因卡拉,花费3个月时间设计出了世界 ...

  5. 微信小程序之数独挑战九宫格

    微信现有的九宫格小程序感觉要么功能不好用,要么题不太好,自己做了一个,题用程序生成的都有唯一解,分为初级.中级.高级.大师: 入门级别比较简单,入门者很容易就能做答: 中级稍有难度,需要利用数独的基本 ...

  6. 数独挑战之九宫格入门第一题解题思路

    入门题比较简单,先看第一题: 数独位置说明: 解题思路: 简单标记后会发现很多数都是唯一的,可以直接给出答案: 即: r3c8=4 r1c2=3 r2c5=2 r6c9=8 等等 用到的方法为主要为唯 ...

  7. codevs2924数独挑战 深度优先搜索

    题目链接:loi_dqs Orz 题目描述: "芬兰数学家因卡拉,花费3个月时间设计出了世界上迄今难度最大的数独游戏,而且它只有一个答案.因卡拉说只有思考能力最快.头脑最聪明的人才能破解这个 ...

  8. 数独挑战(牛客网 2019年华南理工大学程序设计竞赛(春季赛))

    链接:https://ac.nowcoder.com/acm/contest/625/E 来源:牛客网 数独是一种填数字游戏,英文名叫 Sudoku,起源于瑞士,上世纪 70 年代由美国一家数学逻辑游 ...

  9. 微信小程序:数独挑战之九宫格-中级-第一题解题思路

    题目 中级第一题相对比较简单,只要运行唯一余数.排除法基本就能解出来,下面看一下解题路径: 最终答案为: 转载于:https://www.cnblogs.com/webjlwang/p/1061267 ...

最新文章

  1. Exchange2010配置实验(六)部署forefront到edge服务器
  2. 大厂HR年底绷不住了:怎么招程序员这么难,尤其搞这项技术的!!
  3. 从键盘上录入学生人数和每个学生的分数,按分数降序输出所有的分数,java冒泡排序应用
  4. blender使用_使用Blender准备骨科手术
  5. Java课程笔记_3
  6. 【强连通分量·Tarjan】bzoj1179: [Apio2009]Atm
  7. TListView列表拒绝添加重复信息
  8. 【布局优化】基于人工鱼群算法实现充电桩布局优化matlab源码
  9. Redhat注册方法
  10. 南方CASS11.0安装教程
  11. java javaw 命令区别_java、javaw和javaws的区别
  12. 弘辽科技:新手拼多多店铺该怎么引流
  13. 再论由内而外造就自己
  14. 广州搬家公司 居民搬家 公司搬迁 事业单位搬迁全天服务
  15. 75道经典AI面试题,我就想把你们安排的明明白白的!(含答案)
  16. 全国计算机等级考试——二级JAVA完整大题题库【五十三道】
  17. 中石油即时通手机版显示服务器登录失败,中石油即时通手机最新版app
  18. 导入mysql 1044_MySQL导入sql文件错误#1044
  19. Adobe系列安装问题汇总,遇到这些问题该怎么办
  20. [附源码]Nodejs计算机毕业设计宿舍人员签到管理系统Express(程序+LW)

热门文章

  1. visual c++ 部分窗口样式设置
  2. 任务和特权级保护(二)——《x86汇编语言:从实模式到保护模式》读书笔记32
  3. SpringBoot自定义转换器(Convert)
  4. USB OTG ID 检测原理
  5. undefined reference to 问题解决方法
  6. 数据结构:二分查找算法
  7. Dalvik解释器源码到VMP分析
  8. IPFS + 区块链 系列】 入门篇 - IPFS + Ethereum (上篇)-js-ipfs-api
  9. 在區塊鏈上建立可更新的智慧合約(一)
  10. Android Linker学习笔记