博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3074 Sudoku DLX精确覆盖
阅读量:6941 次
发布时间:2019-06-27

本文共 2670 字,大约阅读时间需要 8 分钟。

DLX精确覆盖.....模版题

Sudoku
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 8336   Accepted: 2945

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

527389416819426735436751829375692184194538267268174593643217958951843672782965341416837529982465371735129468571298643293746185864351297647913852359682714128574936

Source

[]   [Go Back]   []   []

#include 
#include
#include
#include
using namespace std;const int N=9;const int maxn=N*N*N+10;const int maxm=N*N*4+10;const int maxnode=maxn*4+maxm+10;char sudoku[maxn];struct DLX{ int n,m,size; int U[maxnode],D[maxnode],L[maxnode],R[maxnode],Row[maxnode],Col[maxnode]; int H[maxnode],S[maxnode]; int ansd,ans[maxn]; void init(int _n,int _m) { n=_n; m=_m; for(int i=0;i<=m;i++) { S[i]=0; U[i]=D[i]=i; L[i]=i-1; R[i]=i+1; } R[m]=0; L[0]=m; size=m; for(int i=1;i<=n;i++) H[i]=-1; } void Link(int r,int c) { ++S[Col[++size]=c]; Row[size]=r; D[size]=D[c]; U[D[c]]=size; U[size]=c; D[c]=size; if(H[r]<0) H[r]=L[size]=R[size]=size; else { R[size]=R[H[r]]; L[R[H[r]]]=size; L[size]=H[r]; R[H[r]]=size; } } void remove(int c) { L[R[c]]=L[c]; R[L[c]]=R[c]; for(int i=D[c];i!=c;i=D[i]) for(int j=R[i];j!=i;j=R[j]) { U[D[j]]=U[j]; D[U[j]]=D[j]; --S[Col[j]]; } } void resume(int c) { for(int i=U[c];i!=c;i=U[i]) for(int j=L[i];j!=i;j=L[j]) ++S[Col[U[D[j]]=D[U[j]]=j]]; L[R[c]]=R[L[c]]=c; } bool Dance(int d) { if(R[0]==0) { for(int i=0;i

转载地址:http://acinl.baihongyu.com/

你可能感兴趣的文章
局域网内搭建 本地yum 源
查看>>
golang: 常用数据类型底层结构分析
查看>>
How to Set Cores-Per-Socket Parameter for a Virtual Machine
查看>>
我的友情链接
查看>>
如何做出一个弹出窗口
查看>>
solidity 0.5.7简明教程
查看>>
你好啊中国
查看>>
冯柯:同步设计在高性能OLTP数据库中的实践
查看>>
iPhone史上最全的使用教程
查看>>
推广一款不错的应用“锁屏对对碰”
查看>>
Oracle IO问题解析(九)
查看>>
How to Properly Remove Datastore or LUN from ESXi 5.x hosts
查看>>
[读书]读《重构-改善既有代码的设计》
查看>>
我的友情链接
查看>>
一次owa登录exchange邮箱提示下载owaauth.dll的解决办法
查看>>
我的友情链接
查看>>
Log.cat 的使用
查看>>
使用myEclipse把java项目上传到码云
查看>>
Python爬虫框架Scrapy 学习笔记 5 ------- 使用pipelines过滤敏感词
查看>>
GTM+800的时间格式转成yyyy-mm-dd的格式
查看>>