SQL> with m as ( 2 select 'A' n from dual union all 3 select 'B' n from dual union all 4 select 'C' n from dual union all 5 select 'D' n from dual 6 ) 7 select m1.n n1, m2.n n2, m3.n n3, m4.n n4 8 from m m1, m m2, m m3, m m4 9 where regexp_count(m1.n || m2.n || m3.n || m4.n, 'A') = 1 10 and regexp_count(m1.n || m2.n || m3.n || m4.n, 'B') = 1 11 and regexp_count(m1.n || m2.n || m3.n || m4.n, 'C') = 1 12 and regexp_count(m1.n || m2.n || m3.n || m4.n, 'D') = 1; N1 N2 N3 N4 -- -- -- -- A B C D A B D C A C B D A C D B A D B C A D C B B A C D B A D C B C A D B C D A B D A C B D C A C A B D C A D B C B A D C B D A C D A B C D B A D A B C D A C B D B A C D B C A D C A B D C B A 24 rows selectedSQL>
肯定要限制以最少次数过桥,不然就无穷解了, 应该是3去(2人),2回(1人来接),一共最少过桥3*2+2=8次 也就是要满足下面条件的就是解, 1、每人至少过桥1次 2、每人过桥奇数次(偶数就回来了) 3、总和是8次(个人最大5次) with tab as (select 1 as n from dual union all select 3 from dual union all select 5 from dual) select a.n as a,b.n as b,c.n as c,d.n as d from tab a,tab b,tab c,tab d where a.n + b.n + c.n + d.n = 8 A B C D 1 1 1 5 1 1 3 3 1 1 5 1 1 3 1 3 1 3 3 1 1 5 1 1 3 1 1 3 3 1 3 1 3 3 1 1 5 1 1 1
SQL> with m as (
2 select 'A' n from dual union all
3 select 'B' n from dual union all
4 select 'C' n from dual union all
5 select 'D' n from dual
6 )
7 select m1.n n1, m2.n n2, m3.n n3, m4.n n4
8 from m m1, m m2, m m3, m m4
9 where regexp_count(m1.n || m2.n || m3.n || m4.n, 'A') = 1
10 and regexp_count(m1.n || m2.n || m3.n || m4.n, 'B') = 1
11 and regexp_count(m1.n || m2.n || m3.n || m4.n, 'C') = 1
12 and regexp_count(m1.n || m2.n || m3.n || m4.n, 'D') = 1;
N1 N2 N3 N4
-- -- -- --
A B C D
A B D C
A C B D
A C D B
A D B C
A D C B
B A C D
B A D C
B C A D
B C D A
B D A C
B D C A
C A B D
C A D B
C B A D
C B D A
C D A B
C D B A
D A B C
D A C B
D B A C
D B C A
D C A B
D C B A
24 rows selectedSQL>
应该是3去(2人),2回(1人来接),一共最少过桥3*2+2=8次
也就是要满足下面条件的就是解,
1、每人至少过桥1次
2、每人过桥奇数次(偶数就回来了)
3、总和是8次(个人最大5次)
with tab as (select 1 as n from dual union all select 3 from dual union all select 5 from dual)
select a.n as a,b.n as b,c.n as c,d.n as d
from tab a,tab b,tab c,tab d
where a.n + b.n + c.n + d.n = 8
A B C D
1 1 1 5
1 1 3 3
1 1 5 1
1 3 1 3
1 3 3 1
1 5 1 1
3 1 1 3
3 1 3 1
3 3 1 1
5 1 1 1