|
终于找到了跟 peter的差别了,他用的是线段首尾相连,而我们上面用的是跟前面任何一个线段相连,
但跟前面任何一个线段相连跑不出答案,(下面是考虑首尾相连后的修改)
SQL> with point(n,x,y) as (select level n,ceil(level/3),decode(mod(level,3),0,3,mod(level,3)) from dual connect by level<=9),
2 line(n,p1,p2) as (select rownum,p1.n,p2.n from point p1,point p2 where abs(p1.x - p2.x) + abs(p1.y-p2.y) =1 and p1.n < p2.n),
3 shape(lvl,nlist,val,p1,p2) as (select 1,cast(n as varchar2(100)),power(2,n),p1,p2 from line
4 union all
5 select s.lvl + 1,
6 s.nlist||','||a.n,
7 s.val + power(2,a.n),
8 a.p1,
9 a.p2
10 from shape s,line a
11 where bitand(s.val,power(2,a.n))=0
12 and lvl < 12
13 and (a.p1 = s.p1 or a.p1 = s.p2 or a.p2 = s.p1 or a.p2 = s.p2)
14 )
15 select sum(cnt)
16 from (select lvl, count(distinct val) cnt from shape group by lvl)
17 /
SUM(CNT)
----------
1609 |
|