推荐一个写数独很好的博客:http://www.cnblogs.com/grenet/p/3163550.html

主要是把九宫格里的元素换到矩阵里面再求解dancing links

网上找的一模版

 #include<cstdio>
#include<cstring>
#define MAXM 10
#define MAXL 324
#define MAXN 240000
#define INF 0x7FFFFFFF
char sd[MAXM][MAXM];
int L[MAXN], R[MAXN], U[MAXN], D[MAXN], H[MAXN];
int size, C[MAXN], S[MAXN], X[MAXN], Q[MAXN], vis[MAXL * ];
bool Read()
{
int i, j;
for (i = ; i < MAXM; i++)
{
for (j = ; j < MAXM; j++)
{
scanf(" %c", &sd[i][j]);
if (sd[i][j] == 'e')
return false;
}
}
return true;
}
void Init()
{
int i;
for (i = ; i <= MAXL; i++)
{
L[i + ] = i;
R[i] = i + ;
U[i] = D[i] = i;
S[i] = ;
}
R[MAXL] = ;
size = MAXL + ;
}
void Remove(int c)
{
int i, j;
L[R[c]] = L[c];
R[L[c]] = R[c];
for (i = D[c]; i != c; i = D[i])
{
for (j = R[i]; j != i; j = R[j])
{
U[D[j]] = U[j];
D[U[j]] = D[j];
S[C[j]]--;
}
}
}
void Resume(int c)
{
int i, j;
L[R[c]] = c;
R[L[c]] = c;
for (i = D[c]; i != c; i = D[i])
{
for (j = R[i]; j != i; j = R[j])
{
U[D[j]] = j;
D[U[j]] = j;
S[C[j]]++;
}
}
}
inline void Link(int r, int c)
{
D[size] = D[c];
U[size] = c;
U[D[c]] = size;
D[c] = size;
if (H[r] < )
H[r] = L[size] = R[size] = size;
else
{
L[size] = H[r];
R[size] = R[H[r]];
L[R[H[r]]] = size;
R[H[r]] = size;
}
S[c]++;
X[size] = r;
C[size++] = c;
}
bool Dance(int now)
{
int i, j, c, temp;
if (R[] == )
return true;
for (temp = INF,i = R[]; i; i = R[i])
{
if (S[i] < temp)
{
temp = S[i];
c = i;
}
}
Remove(c);
for (i = D[c]; i != c; i = D[i])
{
vis[X[i]] = true;
for (j = R[i]; j != i; j = R[j])
Remove(C[j]);
if (Dance(now + ))
return true;
for (j = L[i]; j != i; j = L[j])
Resume(C[j]);
vis[X[i]] = false;
}
Resume(c);
return false;
}
int main()
{
int i, j, k, r;
while (Read())
{
Init();
for (r = , i = ; i < MAXM; i++)
{
for (j = ; j < MAXM; j++)
{
if (sd[i][j] == '.')
{
for (k = ; k < MAXM; k++)
{
H[++r] = -;
Q[r] = k;
Link(r, (i - ) * + k);
Link(r, + (j - ) * + k);
Link(r, + ((i - ) / * + (j - ) / ) * + k);
Link(r, + (i - ) * + j);
}
}
else
{
H[++r] = -;
k = sd[i][j] - '';
Q[r] = k;
Link(r, (i - ) * + k);
Link(r, + (j - ) * + k);
Link(r, + ((i - ) / * + (j - ) / ) * + k);
Link(r, + (i - ) * + j);
}
}
}
memset(vis, false, sizeof(vis));
Dance();
for (i = ; i <= r; i++)
{
if (vis[i])
printf("%d", Q[i]);
}
putchar('\n');
}
return ;
}

POJ 3074 Sudoku (Dacing Links)的更多相关文章

  1. poj 3074 Sudoku(Dancing Links)

    Sudoku Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8152   Accepted: 2862 Descriptio ...

  2. POJ 3074 Sudoku (DLX)

    Sudoku Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  3. POJ 3074 Sudoku (Dancing Links)

    传送门:http://poj.org/problem?id=3074 DLX 数独的9*9的模板题. 具体建模详见下面这篇论文.其中9*9的数独怎么转化到精确覆盖问题,以及相关矩阵行列的定义都在下文中 ...

  4. POJ 3074 Sudoku DLX精确覆盖

    DLX精确覆盖.....模版题 Sudoku Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8336   Accepted: ...

  5. POJ 3076 Sudoku (dancing links)

    题目大意: 16*16的数独. 思路分析: 多说无益. 想说的就是dancing links 的行是依照 第一行第一列填 1 第一行第二列填 2 -- 第一行第十五列填15 第一行第二列填 1 -- ...

  6. (简单) POJ 3074 Sudoku, DLX+精确覆盖。

    Description In the game of Sudoku, you are given a large 9 × 9 grid divided into smaller 3 × 3 subgr ...

  7. POJ - 3074 Sudoku (搜索)剪枝+位运算优化

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

  8. POJ 3074 Sudoku(算竞进阶习题)

    二进制优化+dfs 话说这题数据中真的丧心病狂..不加inline还过不去.. 因为不会DLX只好用二进制来优化了...万万没想到还是低空飘过 我们在行.列.格分别用一个9位二进制常数来记录什么数能放 ...

  9. 搜索(DLX): POJ 3074 3076 Sudoku

    POJ 3074 : Description In the game of Sudoku, you are given a large 9 × 9 grid divided into smaller ...

随机推荐

  1. 更加直观地了解hasLayout和BFC

    网络上有很多关于hasLayout和BFC相关的文章,但是大部分都显得有些晦涩难懂.所以想用一些比较直观的例子来说明hasLayout和BFC给平时的布局带来的影响. 基础知识 在讲hasLayout ...

  2. linux curl命令验证服务器断点续传支持

    有个同事说,发现现在对外下载安装包的服务器不支持断点续传,我听了一阵纳闷,lighttpd server对于静态文件应该默认支持断点续传的,登机器查看lighttpd配置文件发现 对断点续传的支持被禁 ...

  3. 重复数据插入unique列时,锁加在哪?

    1.测试目的 当插入重复数据到有unique索引的表中时,采用何种加锁机制. 2.测试思路 利用10046确定是什么操作导致加锁阻塞了进程: dump锁定前最近一次操作的块结构来分析加锁机制. 3.测 ...

  4. 将yyyyMMdd HH:mm:ss格式的时间转换成时间类型

    DateTime.ParseExact(gmt_withdrawal, "yyyyMMddHHmmss", System.Globalization.CultureInfo.Cur ...

  5. JAVA NIO之Character Set

    明白以下几个概念: 字母集(Character Set),汉字,特殊符号,字母这些都是字符集: 字符编码集(Coded character set),将字符集的字符使用数字进行编码:比如ASCII,就 ...

  6. 【web安全】第一弹:利用xss注入获取cookie

    首先一定要先来吐槽一下tipask系统.这是一枚开源的类似百度知道的系统,但是漏洞多多,最基本的XSS注入都无法防御. 言归正传: [准备1] cookie接收服务器. 平时喜欢用sae,所以在sae ...

  7. ListToDataTable

    public static DataTable ToDataTable<T>(IEnumerable<T> collection)       {           var ...

  8. docker安装caffe

    [最近一直想要学习caffe,但是苦苦纠结于环境安装不上,真的是第一步都迈不出去,还好有docker的存在!下面,对本人如何利用docker安装caffe做以简单叙述,不属于教程,只是记录自己都做了什 ...

  9. 《Linux命令行大全》系列(三、Linux 系统)

    在<Linux命令行大全>一书中,第3章名称是 Linux 系统. 概念太大,不过该节内容却是 Linux 系统最为核心的基础——查看 Linux 系统. ls 命令 显示目录自身信息或目 ...

  10. Hdu 2971 Tower

    Description Alan loves to construct the towers of building bricks. His towers consist of many cuboid ...