数独难题游戏16×16字母

仔细读题!不要偷懒!多看Clarification!
【UVALive】2659 Sudoku 【数独】精确覆盖
题目分析:16个字母的数独。精确覆盖问题。注意输出,两组输出之间空一行。
代码如下:
#include &bits/stdc++.h&
#define rec( i , A , o ) for ( int i = A[o] ; i != i = A[i] )
#define clr( a , x ) memset ( a , x , sizeof a )
const int MAXC = 11000 ;//1024
const int MAXR = 41000 ;//4096
const int MAXNODE = 180000 ;//16384 + 1025
struct DLX {
int U[MAXNODE] , D[MAXNODE] , L[MAXNODE] , R[MAXNODE] ;
int row[MAXNODE] , col[MAXNODE] ;
int H[MAXR] , S[MAXC] ;
int ans[MAXC] ;
char G[16][20] ;
void init ( int n ) {
clr ( H , -1 ) ;
for ( int i = 0 ; i &= ++ i ) {
S[i] = 0 ;
L[i] = i - 1 ;
R[i] = i + 1 ;
R[nv] = 0 ;
void link ( int r , int c ) {
row[size] =
col[size] =
U[size] = U[c] ;
if ( ~H[r] ) {
L[size] = L[H[r]] ;
R[size] = H[r] ;
L[R[size]] =
R[L[size]] =
} else H[r] = L[size] = R[size] =
void remove ( int c ) {
L[R[c]] = L[c] ;
R[L[c]] = R[c] ;
rec ( i , D , c ) rec ( j , R , i ) {
U[D[j]] = U[j] ;
D[U[j]] = D[j] ;
-- S[col[j]] ;
void resume ( int c ) {
rec ( i , U , c ) rec ( j , L , i ) {
++ S[col[j]] ;
int dance ( int d ) {
if ( R[0] == 0 ) {
return 1 ;
int c = R[0] ;
rec ( i , R , 0 ) if ( S[c] & S[i] ) c =
remove ( c ) ;
rec ( i , D , c ) {
ans[d] = row[i] ;
rec ( j , R , i ) remove ( col[j] ) ;
if ( dance ( d + 1 ) ) return 1 ;
rec ( j , L , i ) resume ( col[j] ) ;
resume ( c ) ;
return 0 ;
int solve ( int flag ) {
init ( 1 && 10 ) ;
for ( int i = 0 ; i & 16 ; ++ i ) {
if ( scanf ( "%s" , G[i] ) == EOF ) return 0 ;
for ( int j = 0 ; j & 16 ; ++ j ) if ( G[i][j] != '-' ) {
G[i][j] -= 'A' - 1 ;
int r = ( i * 16 + j ) * 16 + G[i][j] ;
int c1 = i * 16 + j + 1 ;
int c2 = 256 + i * 16 + G[i][j] ;
int c3 = 512 + j * 16 + G[i][j] ;
int c4 = 768 + ( i / 4 * 4 + j / 4 ) * 16 + G[i][j] ;
link ( r , c1 ) ;
link ( r , c2 ) ;
link ( r , c3 ) ;
link ( r , c4 ) ;
S[c1] = S[c2] = S[c3] = S[c4] = -1 ;
for ( int i = 0 ; i & 16 ; ++ i ) {
for ( int j = 0 ; j & 16 ; ++ j ) if ( G[i][j] == '-' ) {
for ( int k = 0 ; k & 16 ; ++ k ) {
int r = ( i * 16 + j ) * 16 + k + 1 ;
int c1 = i * 16 + j + 1 ;
int c2 = 256 + i * 16 + k + 1 ;
int c3 = 512 + j * 16 + k + 1 ;
int c4 = 768 + ( i / 4 * 4 + j / 4 ) * 16 + k + 1 ;
if ( ~S[c1] && ~S[c2] && ~S[c3] && ~S[c4] ) {
link ( r , c1 ) ;
link ( r , c2 ) ;
link ( r , c3 ) ;
link ( r , c4 ) ;
dance ( 0 ) ;
for ( int i = 0 ; i & ++ i ) {
int x = ( ans[i] - 1 ) % 16 + 'A' ;
int r = ( ans[i] - 1 ) / 16 / 16 ;
int c = ( ans[i] - 1 ) / 16 % 16 ;
if ( flag ) printf ( "\n" ) ;
for ( int i = 0 ; i & 16 ; ++ i ) {
for ( int j = 0 ; j & 16 ; ++ j ) printf ( "%c" , G[i][j] ) ;
printf ( "\n" ) ;
return 1 ;
int main () {
int flag = 0 ;
while ( x.solve ( flag ) ) flag = 1 ;
return 0 ;
没有更多推荐了,10月8日转字母数独 | 快乐数独小组 | 果壳网 科技有意思
8108人加入此小组
转发一道 博客的新题一道0月3日,传来喜讯,中国数独队在克罗地亚举行的2012第七届世界数独锦标赛上取得骄人的战绩,为祝贺中国队所取得的成绩,特用中国队的六位成员陈岑、金策、邱言哲、田健、桂勇和黄振谱的名字中首写拼音字母出题,以示庆贺,感谢他们为中国数独的发展所做出的巨大贡献。
【字母数独】 规则:
将字母C、G、H、J、P、Q、T、Y、Z填入空格内,使行、列及九宫格内均无重复的字母。并从行、列或斜线中找出陈岑(CC)、金策(JC)、邱言哲(QYZ)、田健(TJ)、桂勇(GY)和黄振谱(HZP)的名字,名字只能由连续格组成,而且是唯一的,顺读倒读均可。
蓝色格组成数字“3”,粉色格组成数字“7”,寓意中国数独队,在2012第七届世界数独锦标赛上取得的重大突破,分别在团体赛上由中国A队获得团体第三名(陈岑、金策、邱言哲和田健),个人赛上由陈岑获得第七名。
做了好久没做出来。
乐逍遥的题做了很多,但对这些参加比赛的国手知之甚少,记得你贴过的“无框杀手”是金策题吧,在乐逍遥的博客中有一题邱言哲是题,觉得他们出题的水平很高,出的题很好。其他几人大概也有题吧?能否贴一些出来?中国的成绩知道了,其他取得好成绩的是哪些国家?
的话:做了好久没做出来。乐逍遥的题做了很多,但对这些参加比赛的国手知之甚少,记得你贴过的“无框杀手”是金策题吧,在乐逍遥的博客中有一题邱言哲是题,觉得他们出题的水平很高,出的题很好。其他几人大概也有题吧?能否贴一些出来?中国的成绩知道了,其他取得好成绩的是哪些国家?小邱的题我转发过一道:
最近不务“正业”,没怎么做数独,要开始收收心,对给大家发点题了
的话:小邱的题我转发过一道:是的,我当时只知道他是个了不起的孩子,现在方知他还是位国手。其他几位的题有吗?
(C)果壳网&&&&京ICP证100430号&&&&京网文[-239号&&&&新出发京零字东150005号&&&&
违法和不良信息举报邮箱:&&&&举报电话:&&&&&&&&you have been blocked怎样用高智商表达喜欢一个人
比如解一个数独或者一串字母
数字等_百度知道
怎样用高智商表达喜欢一个人
比如解一个数独或者一串字母
怎样用高智商表达喜欢一个人比如解一个数独或者一串字母
我有更好的答案
总有人说,只要有爱就有一切。没错,爱情让你们克服困难,只需拥有对方就够了。可能持续多久呢?其实相爱不该是冲动,而应该是责任。你爱一个人,就必须要有养家的能力,要有照顾对方的勇气。如果扛不起这样的责任,那就不要随便去爱人。有时候爱的草率,根本是在害人。
采纳率:96%
来自团队:
为您推荐:
其他类似问题
数独的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。【数独】字母数独【智力题吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:46,599贴子:
【数独】字母数独收藏
每一行和每一列都包含字母A、B、C、D和E,用粗线格成的每一部分也都包含这5个字母,且每个字母在每一行、每一列或每个部分中都只能出现一次。你能将表格填完整吗?
剑子老师,此楼到此止步了,
登录百度帐号}

我要回帖

更多关于 数独难题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信