标签:blog http os 使用 ar for div 问题 代码
题目:
http://poj.org/problem?id=2676
题意:
数独,每行1-9,每列1-9,每3*3小格1-9,填数,不能重复
方法:Dancing Links(16ms)或者DFS暴搜(400-900ms)
Dancing Links(DLX) 是为了解决矩阵精确覆盖问题的算法,算法效率非常高
使用DLX解决的问题必须转化为矩阵精确覆盖问题:
1、DLX详解:
http://wenku.baidu.com/view/d8f13dc45fbfc77da269b126.html
2、转化方法:
非常详细的讲解:http://www.cnblogs.com/grenet/p/3163550.html
约束1:每个格子只能填一个数:dlx.Link(t, encode(0, i, j));
约束2:每行需1-9:dlx.Link(t, encode(1, i, k - 1));
约束3:每列需1-9:dlx.Link(t, encode(2, j, k - 1));
约束4:每3*3格子需1-9:dlx.Link(t, encode(3, (i / 3) * 3 + j / 3, k - 1));
1 void build()
2 {
3 for (int i = 0; i < 9; i++)
4 for (int j = 0; j < 9; j++)
5 for (int k = 1; k <= 9; k++)
6 if (mtx[i][j] == ‘0‘ || mtx[i][j] == k + ‘0‘)
7 {
8 int t = encode(i, j, k - 1);
9 dlx.Link(t, encode(0, i, j));
10 dlx.Link(t, encode(1, i, k - 1));
11 dlx.Link(t, encode(2, j, k - 1));
12 dlx.Link(t, encode(3, (i / 3) * 3 + j / 3, k - 1));
13 }
14 }
DLX模板(转自kuangbin(http://www.cnblogs.com/kuangbin/p/3752854.html)):
代码:
POJ 2676 Sudoku (搜索,Dancing Links)
标签:blog http os 使用 ar for div 问题 代码
原文地址:http://www.cnblogs.com/xysmlx/p/3951267.html