SQL语言的魅力 36秒求解八皇后问题(92种结果)

--该表保存结果
create table c(c1 tinyint, c2 tinyint, c3 tinyint, c4 tinyint, c5 tinyint, c6 tinyint, c7 tinyint, c8 tinyint, c9 tinyint, c10 tinyint, c11 tinyint, c12 tinyint, c13 tinyint, c14 tinyint, c15 tinyint, c16 tinyint, c17 tinyint, c18 tinyint, c19 tinyint, c20 tinyint, c21 tinyint, c22 tinyint, c23 tinyint, c24 tinyint, c25 tinyint, c26 tinyint, c27 tinyint, c28 tinyint, c29 tinyint, c30 tinyint, c31 tinyint, c32 tinyint, c33 tinyint, c34 tinyint, c35 tinyint, c36 tinyint, c37 tinyint, c38 tinyint, c39 tinyint, c40 tinyint, c41 tinyint, c42 tinyint, c43 tinyint, c44 tinyint, c45 tinyint, c46 tinyint, c47 tinyint, c48 tinyint, c49 tinyint, c50 tinyint, c51 tinyint, c52 tinyint, c53 tinyint, c54 tinyint, c55 tinyint, c56 tinyint, c57 tinyint, c58 tinyint, c59 tinyint, c60 tinyint, c61 tinyint, c62 tinyint, c63 tinyint, c64 tinyint)
--该表做笛卡尔积
create table tb(t tinyint)
insert into tb
select 1 union
select 0

--将tb表做64次笛卡尔积,产生所有的可能类型
--根据估算,一共有2的64次方种可能,每一种可能在表c中用64个tinyint型的字段保存
--无法保存所有的可能(大约1073741824T)
--一下语句先做迪卡积,然后从结果中筛选
insert into c
select * from
(
select tb1.t c1 ,tb2.t c2 ,tb3.t c3 ,tb4.t c4 ,tb5.t c5 ,tb6.t c6 ,tb7.t c7 ,tb8.t c8 ,tb9.t c9 ,tb10.t c10,tb11.t c11,tb12.t c12,tb13.t c13,tb14.t c14,tb15.t c15,tb16.t c16,tb17.t c17,tb18.t c18,tb19.t c19,tb20.t c20,tb21.t c21,tb22.t c22,tb23.t c23,tb24.t c24,tb25.t c25,tb26.t c26,tb27.t c27,tb28.t c28,tb29.t c29,tb30.t c30,tb31.t c31,tb32.t c32,tb33.t c33,tb34.t c34,tb35.t c35,tb36.t c36,tb37.t c37,tb38.t c38,tb39.t c39,tb40.t c40,tb41.t c41,tb42.t c42,tb43.t c43,tb44.t c44,tb45.t c45,tb46.t c46,tb47.t c47,tb48.t c48,tb49.t c49,tb50.t c50,tb51.t c51,tb52.t c52,tb53.t c53,tb54.t c54,tb55.t c55,tb56.t c56,tb57.t c57,tb58.t c58,tb59.t c59,tb60.t c60,tb61.t c61,tb62.t c62,tb63.t c63,tb64.t c64
from
tb tb1  cross join tb tb2 cross join tb tb3 cross join tb tb4 cross join tb tb5 cross join tb tb6 cross join tb tb7 cross join tb tb8 cross join tb tb9 cross join tb tb10 cross join tb tb11 cross join tb tb12 cross join tb tb13 cross join tb tb14 cross join tb tb15 cross join tb tb16 cross join tb tb17 cross join tb tb18 cross join tb tb19 cross join tb tb20 cross join tb tb21 cross join tb tb22 cross join tb tb23 cross join tb tb24 cross join tb tb25 cross join tb tb26 cross join tb tb27 cross join tb tb28 cross join tb tb29 cross join tb tb30 cross join tb tb31 cross join tb tb32 cross join tb tb33 cross join tb tb34 cross join tb tb35 cross join tb tb36 cross join tb tb37 cross join tb tb38 cross join tb tb39 cross join tb tb40 cross join tb tb41 cross join tb tb42 cross join tb tb43 cross join tb tb44 cross join tb tb45 cross join tb tb46 cross join tb tb47 cross join tb tb48 cross join tb tb49 cross join tb tb50 cross join tb tb51 cross join tb tb52 cross join tb tb53 cross join tb tb54 cross join tb tb55 cross join tb tb56 cross join tb tb57 cross join tb tb58 cross join tb tb59 cross join tb tb60 cross join tb tb61 cross join tb tb62 cross join tb tb63 cross join tb tb64
) a
where
--横
c1 +c2 +c3 +c4 +c5 +c6 +c7 +c8  in(0,1) and c9 +c10+c11+c12+c13+c14+c15+c16 in(0,1) and c17+c18+c19+c20+c21+c22+c23+c24 in(0,1) and c25+c26+c27+c28+c29+c30+c31+c32 in(0,1) and c33+c34+c35+c36+c37+c38+c39+c40 in(0,1) and c41+c42+c43+c44+c45+c46+c47+c48 in(0,1) and c49+c50+c51+c52+c53+c54+c55+c56 in(0,1) and c57+c58+c59+c60+c61+c62+c63+c64 in(0,1)
and
--竖
c1 +c9 +c17+c25+c33+c41+c49+c57 in(0,1) and c2 +c10+c18+c26+c34+c42+c50+c58 in(0,1) and c3 +c11+c19+c27+c35+c43+c51+c59 in(0,1) and c4 +c12+c20+c28+c36+c44+c52+c60 in(0,1) and c5 +c13+c21+c29+c37+c45+c53+c61 in(0,1) and c6 +c14+c22+c30+c38+c46+c54+c62 in(0,1) and c7 +c15+c23+c31+c39+c47+c55+c63 in(0,1) and c8 +c16+c24+c32+c40+c48+c56+c64 in(0,1)
and
--左斜
c1  in(0,1) and c16+c23+c30+c37+c44+c51+c58 in(0,1) and c2 +c9  in(0,1) and c24+c31+c38+c45+c52+c59 in(0,1) and c3 +c10+c17 in(0,1) and c32+c39+c46+c53+c60 in(0,1) and c4 +c11+c18+c25 in(0,1) and c40+c47+c54+c61 in(0,1) and c5 +c12+c19+c26+c33 in(0,1) and c48+c55+c62 in(0,1) and c6 +c13+c20+c27+c34+c41 in(0,1) and c56+c63 in(0,1) and c7 +c14+c21+c28+c35+c42+c49 in(0,1) and c64 in(0,1) and c8 +c15+c22+c29+c36+c43+c50+c57 in(0,1) 
and
--右斜
c1 +c10+c19+c28+c37+c46+c55+c64 in(0,1) and c9 +c18+c27+c36+c45+c54+c63 in(0,1) and c2 +c11+c20+c29+c38+c47+c56 in(0,1) and c17+c26+c35+c44+c53+c62 in(0,1) and c3 +c12+c21+c30+c39+c48 in(0,1) and c25+c34+c43+c52+c61 in(0,1) and c4 +c13+c22+c31+c40 in(0,1) and c33+c42+c51+c60 in(0,1) and c5 +c14+c23+c32 in(0,1) and c41+c50+c59 in(0,1) and c6 +c15+c24 in(0,1) and c49+c58 in(0,1) and c7 +c16 in(0,1) and c57 in(0,1) and c8  in(0,1) 
and
--八皇后
c1+c2+c3+c4+c5+c6+c7+c8+c9+c10+c11+c12+c13+c14+c15+c16+c17+c18+c19+c20+c21+c22+c23+c24+c25+c26+c27+c28+c29+c30+c31+c32+c33+c34+c35+c36+c37+c38+c39+c40+c41+c42+c43+c44+c45+c46+c47+c48+c49+c50+c51+c52+c53+c54+c55+c56+c57+c58+c59+c60+c61+c62+c63+c64=8
--00:00:36  (92 行受影响)
--
--以下语句打印结果
declare cur cursor for select * from c
declare @c1  int, @c2  int, @c3  int, @c4  int, @c5  int, @c6  int, @c7  int, @c8   int, @c9  int, @c10 int, @c11 int, @c12 int, @c13 int, @c14 int, @c15 int, @c16  int, @c17 int, @c18 int, @c19 int, @c20 int, @c21 int, @c22 int, @c23 int, @c24  int, @c25 int, @c26 int, @c27 int, @c28 int, @c29 int, @c30 int, @c31 int, @c32  int, @c33 int, @c34 int, @c35 int, @c36 int, @c37 int, @c38 int, @c39 int, @c40  int, @c41 int, @c42 int, @c43 int, @c44 int, @c45 int, @c46 int, @c47 int, @c48  int, @c49 int, @c50 int, @c51 int, @c52 int, @c53 int, @c54 int, @c55 int, @c56  int, @c57 int, @c58 int, @c59 int, @c60 int, @c61 int, @c62 int, @c63 int, @c64 int
open cur
fetch next from cur into @c1 ,@c2 ,@c3 ,@c4 ,@c5 ,@c6 ,@c7 ,@c8  , @c9 ,@c10,@c11,@c12,@c13,@c14,@c15,@c16 , @c17,@c18,@c19,@c20,@c21,@c22,@c23,@c24 , @c25,@c26,@c27,@c28,@c29,@c30,@c31,@c32 , @c33,@c34,@c35,@c36,@c37,@c38,@c39,@c40 , @c41,@c42,@c43,@c44,@c45,@c46,@c47,@c48 , @c49,@c50,@c51,@c52,@c53,@c54,@c55,@c56 , @c57,@c58,@c59,@c60,@c61,@c62,@c63,@c64
print cast(@c1  as char(2))+ cast(@c2  as char(2))+ cast(@c3  as char(2))+ cast(@c4  as char(2))+ cast(@c5  as char(2))+ cast(@c6  as char(2))+ cast(@c7  as char(2))+ cast(@c8  as char(2))
print cast( @c9  as char(2))+ cast(@c10 as char(2))+ cast(@c11 as char(2))+ cast(@c12 as char(2))+ cast(@c13 as char(2))+ cast(@c14 as char(2))+ cast(@c15 as char(2))+ cast(@c16 as char(2))
print cast( @c17 as char(2))+ cast(@c18 as char(2))+ cast(@c19 as char(2))+ cast(@c20 as char(2))+ cast(@c21 as char(2))+ cast(@c22 as char(2))+ cast(@c23 as char(2))+ cast(@c24 as char(2))
print cast( @c25 as char(2))+ cast(@c26 as char(2))+ cast(@c27 as char(2))+ cast(@c28 as char(2))+ cast(@c29 as char(2))+ cast(@c30 as char(2))+ cast(@c31 as char(2))+ cast(@c32 as char(2))
print cast( @c33 as char(2))+ cast(@c34 as char(2))+ cast(@c35 as char(2))+ cast(@c36 as char(2))+ cast(@c37 as char(2))+ cast(@c38 as char(2))+ cast(@c39 as char(2))+ cast(@c40 as char(2))
print cast( @c41 as char(2))+ cast(@c42 as char(2))+ cast(@c43 as char(2))+ cast(@c44 as char(2))+ cast(@c45 as char(2))+ cast(@c46 as char(2))+ cast(@c47 as char(2))+ cast(@c48 as char(2))
print cast( @c49 as char(2))+ cast(@c50 as char(2))+ cast(@c51 as char(2))+ cast(@c52 as char(2))+ cast(@c53 as char(2))+ cast(@c54 as char(2))+ cast(@c55 as char(2))+ cast(@c56 as char(2))
print cast( @c57 as char(2))+ cast(@c58 as char(2))+ cast(@c59 as char(2))+ cast(@c60 as char(2))+ cast(@c61 as char(2))+ cast(@c62 as char(2))+ cast(@c63 as char(2))+ cast(@c64 as char(2))
print '--------------------------------------------------------'
while @@fetch_status=0
 begin
fetch next from cur into @c1 ,@c2 ,@c3 ,@c4 ,@c5 ,@c6 ,@c7 ,@c8  , @c9 ,@c10,@c11,@c12,@c13,@c14,@c15,@c16 , @c17,@c18,@c19,@c20,@c21,@c22,@c23,@c24 , @c25,@c26,@c27,@c28,@c29,@c30,@c31,@c32 , @c33,@c34,@c35,@c36,@c37,@c38,@c39,@c40 , @c41,@c42,@c43,@c44,@c45,@c46,@c47,@c48 , @c49,@c50,@c51,@c52,@c53,@c54,@c55,@c56 , @c57,@c58,@c59,@c60,@c61,@c62,@c63,@c64
print cast(@c1  as char(2))+ cast(@c2  as char(2))+ cast(@c3  as char(2))+ cast(@c4  as char(2))+ cast(@c5  as char(2))+ cast(@c6  as char(2))+ cast(@c7  as char(2))+ cast(@c8  as char(2))
print cast( @c9  as char(2))+ cast(@c10 as char(2))+ cast(@c11 as char(2))+ cast(@c12 as char(2))+ cast(@c13 as char(2))+ cast(@c14 as char(2))+ cast(@c15 as char(2))+ cast(@c16 as char(2))
print cast( @c17 as char(2))+ cast(@c18 as char(2))+ cast(@c19 as char(2))+ cast(@c20 as char(2))+ cast(@c21 as char(2))+ cast(@c22 as char(2))+ cast(@c23 as char(2))+ cast(@c24 as char(2))
print cast( @c25 as char(2))+ cast(@c26 as char(2))+ cast(@c27 as char(2))+ cast(@c28 as char(2))+ cast(@c29 as char(2))+ cast(@c30 as char(2))+ cast(@c31 as char(2))+ cast(@c32 as char(2))
print cast( @c33 as char(2))+ cast(@c34 as char(2))+ cast(@c35 as char(2))+ cast(@c36 as char(2))+ cast(@c37 as char(2))+ cast(@c38 as char(2))+ cast(@c39 as char(2))+ cast(@c40 as char(2))
print cast( @c41 as char(2))+ cast(@c42 as char(2))+ cast(@c43 as char(2))+ cast(@c44 as char(2))+ cast(@c45 as char(2))+ cast(@c46 as char(2))+ cast(@c47 as char(2))+ cast(@c48 as char(2))
print cast( @c49 as char(2))+ cast(@c50 as char(2))+ cast(@c51 as char(2))+ cast(@c52 as char(2))+ cast(@c53 as char(2))+ cast(@c54 as char(2))+ cast(@c55 as char(2))+ cast(@c56 as char(2))
print cast( @c57 as char(2))+ cast(@c58 as char(2))+ cast(@c59 as char(2))+ cast(@c60 as char(2))+ cast(@c61 as char(2))+ cast(@c62 as char(2))+ cast(@c63 as char(2))+ cast(@c64 as char(2))
print '--------------------------------------------------------'
 end
close cur
deallocate cur

--select * from tb where 1 in(1,0) and 1 in(0,1)and 1 in(0,1)and 1 in(0,1)and 1 in(0,1)and 1 in(0,1)and 1 in(0,1)and 1 in(0,1)and 1 in(0,1)and 1 in(0,1)and 1 in(0,1)and 1 in(0,1)and 1 in(0,1)and 1 in(0,1)and 1 in(0,1)and 1 in(0,11)
--declare @i int,@a  varchar(8000)
--set @i=1
--set @a=''
--while @i<=64
--begin
--set @a=@a+'tb'+ltrim(cast(@i as char(2)))+'.t c'+cast(@i as char(2))+','
-- set @i=@i+1
--end
--print @a
--select * from c
--where
--c1
--
--横
--declare @i int ,@c varchar(8000)
--set @i=1
--set @c=''
--while @i<=64
--begin
--    set @c=@c+'c'+cast(@i as char(2))+'+c'+cast(@i+1 as char(2))+'+c'+cast(@i+2 as char(2))+'+c'+cast(@i+3 as char(2))+'+c'+cast(@i+4 as char(2))+'+c'+cast(@i+5 as char(2))+'+c'+cast(@i+6 as char(2))+'+c'+cast(@i+7 as char(2))+' in(0,1) and '
--     set @i=@i+8
--end
--set @c=left(@c,len(@c)-3)
--print @c
--竖
--declare @i int ,@c varchar(8000)
--set @i=1
--set @c=''
--while @i<=8
--begin
--    set @c=@c+'c'+cast(@i as char(2))+'+c'+cast(@i+8 as char(2))+'+c'+cast(@i+16 as char(2))+'+c'+cast(@i+24 as char(2))+'+c'+cast(@i+32 as char(2))+'+c'+cast(@i+40 as char(2))+'+c'+cast(@i+48 as char(2))+'+c'+cast(@i+56 as char(2))+' in(0,1) and '
--     set @i=@i+1
--end
--set @c=left(@c,len(@c)-3)
--print @c
--左斜

--declare @i int,@j int ,@k int ,@c varchar(8000)
--set @i=1
--set @c=''
--while @i<=8
--begin
-- set @j=1
--    set @k=@i
-- while @j<=@i
--  begin
--   set @c=@c+'+c'+cast(@k as char(2))
--   set @k=@k+7
--   set @j=@j+1
--  end
--set @c=@c+' in(0,1) and '
--    set @j=1
-- set @k=(@i+1)*8
-- while @j<=8-@i
--  begin
--   set @c=@c+'+c'+cast(@k as char(2))
--   set @k=@k+7
--   set @j=@j+1
--  end
--set @c=@c+' in(0,1) and '
--    set @i=@i+1
--end
--set @c=replace(@c,'and +','and ')
--set @c=replace(@c,'and  in(0,1) and','')
--set @c=stuff(@c,1,1,'')
--print @c

--右斜
--declare @i int,@j int ,@k int ,@c varchar(8000)
--set @i=1
--set @c=''
--while @i<=8
--begin
-- set @k=@i
-- set @j=1
-- while @j<=9-@i
-- begin
--  set @c=@c+'+c'+cast(@k as char(2))
--  set @k=@k+9
--  set @j=@j+1
-- end
-- set @c=@c+' in(0,1) and '
--   
--    set @j=1
-- set @k=@i*8+1
-- while @j<=8-@i
--  begin
--  set @c=@c+'+c'+cast(@k as char(2))
--  set @k=@k+9
--  set @j=@j+1
--  end
--   set @c=@c+' in(0,1) and '
-- set @i=@i+1
--end
--set @c=replace(@c,'and +','and ')
--set @c=replace(@c,'and  in(0,1) and','')
--set @c=stuff(@c,1,1,'')
--print @c
--

 

 

        

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值