首页 > 代码库 > POJ 2676 Sudoku (搜索,Dancing Links)
POJ 2676 Sudoku (搜索,Dancing Links)
题目:
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)):
DLX模板(from kuangbin)
代码:
POJ 2676
POJ 2676 Sudoku (搜索,Dancing Links)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。