骑士巡逻 wiki
使用了递迴并搭配array , 搭配array, 使用了 row(), all().
PostgreSQL 递迴骑士巡逻Date:2020-09-16create table it200916a ( id smallint generated always as identity, x smallint not null, y smallint not null);insert into it200916a(x, y)select * from generate_series(1,5) a , generate_series(1,5) b;with recursive tmp(x, y, lv, path) as (select x , y , 1 , array[row(x,y)] from it200916a where x = 1 and y = 1 union allselect b.x , b.y , a.lv + 1 , a.path || row(b.x, b.y) from tmp a , it200916a b where (b.x, b.y) in ( (a.x + 2, a.y + 1) ,(a.x - 2, a.y + 1) ,(a.x - 2, a.y - 1) ,(a.x + 1, a.y + 2) ,(a.x + 1, a.y - 2) ,(a.x - 1, a.y + 2) ,(a.x - 1, a.y - 2) ) and row(b.x, b.y) != all(a.path))select lv , path from tmp where lv = 1 or lv = 2 or lv = 24;+-[ RECORD 1 ]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 1 || path | {"(1,1)"} |+-[ RECORD 2 ]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 2 || path | {"(1,1)","(2,3)"} |+-[ RECORD 3 ]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 2 || path | {"(1,1)","(3,2)"} |+-[ RECORD 4 ]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(2,3)","(3,1)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)","(2,2)","(3,4)","(5,5)","(4,3)","(5,1)","(3,2)","(4,4)","(5,2)","(3,3)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)"} |+-[ RECORD 5 ]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(2,3)","(3,1)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)","(3,3)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(3,4)","(5,5)","(4,3)","(5,1)","(3,2)","(4,4)","(5,2)"} |+-[ RECORD 6 ]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(2,3)","(3,1)","(5,2)","(3,3)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)","(2,2)","(3,4)","(5,5)","(4,3)","(5,1)","(3,2)","(4,4)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)"} |+-[ RECORD 7 ]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(2,3)","(3,1)","(5,2)","(4,4)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(3,4)","(5,5)","(4,3)","(5,1)","(3,2)","(2,4)","(1,2)","(3,3)","(4,1)","(5,3)","(4,5)"} |+-[ RECORD 8 ]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(2,3)","(3,1)","(5,2)","(4,4)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(3,4)","(5,5)","(4,3)","(5,1)","(3,2)","(2,4)","(1,2)","(3,3)","(4,5)","(5,3)","(4,1)"} |+-[ RECORD 9 ]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(2,3)","(3,1)","(5,2)","(4,4)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(3,4)","(5,5)","(4,3)","(5,1)","(3,2)","(2,4)","(4,5)","(5,3)","(4,1)","(3,3)","(1,2)"} |+-[ RECORD 10 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(2,3)","(3,1)","(5,2)","(4,4)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(3,4)","(5,5)","(4,3)","(5,1)","(3,2)","(5,3)","(4,1)","(3,3)","(1,2)","(2,4)","(4,5)"} |+-[ RECORD 11 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(2,3)","(3,1)","(5,2)","(4,4)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(3,4)","(5,5)","(4,3)","(5,1)","(3,2)","(5,3)","(4,1)","(3,3)","(4,5)","(2,4)","(1,2)"} |+-[ RECORD 12 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(2,3)","(3,1)","(5,2)","(4,4)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(3,4)","(5,5)","(4,3)","(5,1)","(3,2)","(5,3)","(4,5)","(2,4)","(1,2)","(3,3)","(4,1)"} |+-[ RECORD 13 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(2,3)","(3,1)","(5,2)","(4,4)","(2,5)","(3,3)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)","(2,2)","(3,4)","(5,5)","(4,3)","(5,1)","(3,2)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)"} |+-[ RECORD 14 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(2,3)","(3,5)","(1,4)","(2,2)","(3,4)","(5,5)","(4,3)","(5,1)","(3,2)","(4,4)","(5,2)","(3,1)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)","(3,3)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)"} |+-[ RECORD 15 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(2,3)","(3,5)","(1,4)","(2,2)","(3,4)","(5,5)","(4,3)","(5,1)","(3,2)","(4,4)","(5,2)","(3,1)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)","(3,3)","(5,4)","(4,2)","(2,1)","(1,3)","(2,5)"} |+-[ RECORD 16 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(2,3)","(4,4)","(5,2)","(3,1)","(1,2)","(2,4)","(4,5)","(3,3)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(3,4)","(5,5)","(4,3)","(5,1)","(3,2)","(5,3)","(4,1)"} |+-[ RECORD 17 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(2,3)","(4,4)","(5,2)","(3,1)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)","(2,2)","(3,4)","(5,5)","(4,3)","(5,1)","(3,2)","(1,3)","(2,5)","(3,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)"} |+-[ RECORD 18 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(2,3)","(4,4)","(5,2)","(3,1)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)","(3,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(3,4)","(5,5)","(4,3)","(5,1)","(3,2)","(1,3)","(2,5)"} |+-[ RECORD 19 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(2,3)","(4,4)","(5,2)","(3,1)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)","(3,3)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(3,4)","(5,5)","(4,3)","(5,1)","(3,2)"} |+-[ RECORD 20 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(2,3)","(4,4)","(5,2)","(3,1)","(1,2)","(3,3)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(3,4)","(5,5)","(4,3)","(5,1)","(3,2)","(2,4)","(4,5)","(5,3)","(4,1)"} |+-[ RECORD 21 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(1,3)","(2,1)","(4,2)","(5,4)","(3,3)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)","(2,2)","(1,4)","(3,5)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(3,1)","(5,2)","(4,4)","(2,5)"} |+-[ RECORD 22 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(3,1)","(5,2)","(4,4)","(2,5)","(3,3)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)"} |+-[ RECORD 23 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(3,1)","(5,2)","(4,4)","(2,5)","(3,3)","(4,1)","(5,3)","(4,5)","(2,4)","(1,2)"} |+-[ RECORD 24 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(4,4)","(5,2)","(3,1)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)","(3,3)","(2,5)"} |+-[ RECORD 25 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(3,1)","(5,2)","(4,4)","(2,5)","(3,3)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)","(2,2)","(1,4)"} |+-[ RECORD 26 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(1,3)","(2,5)","(3,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(4,4)","(5,2)","(3,1)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)"} |+-[ RECORD 27 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(1,3)","(2,5)","(3,3)","(2,1)","(4,2)","(5,4)","(3,5)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(4,4)","(5,2)","(3,1)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)","(2,2)","(1,4)"} |+-[ RECORD 28 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(2,4)","(1,2)","(3,3)","(4,5)","(5,3)","(4,1)","(2,2)","(1,4)","(3,5)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(3,1)","(5,2)","(4,4)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)"} |+-[ RECORD 29 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(2,4)","(1,2)","(3,3)","(4,5)","(5,3)","(4,1)","(2,2)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(3,1)","(5,2)","(4,4)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)"} |+-[ RECORD 30 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(2,4)","(4,5)","(5,3)","(4,1)","(2,2)","(1,4)","(3,5)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(3,1)","(5,2)","(4,4)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,3)","(1,2)"} |+-[ RECORD 31 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(2,4)","(4,5)","(5,3)","(4,1)","(2,2)","(1,4)","(3,5)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(4,4)","(5,2)","(3,1)","(1,2)","(3,3)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)"} |+-[ RECORD 32 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(2,4)","(4,5)","(5,3)","(4,1)","(2,2)","(1,4)","(3,5)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(4,4)","(5,2)","(3,1)","(1,2)","(3,3)","(5,4)","(4,2)","(2,1)","(1,3)","(2,5)"} |+-[ RECORD 33 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(2,4)","(4,5)","(5,3)","(4,1)","(2,2)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(4,4)","(5,2)","(3,1)","(1,2)","(3,3)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)"} |+-[ RECORD 34 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(2,4)","(4,5)","(5,3)","(4,1)","(3,3)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(4,4)","(5,2)","(3,1)","(1,2)"} |+-[ RECORD 35 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(4,4)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,3)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)","(2,2)","(1,4)","(3,5)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(3,1)","(5,2)"} |+-[ RECORD 36 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(4,4)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(3,1)","(5,2)","(3,3)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)"} |+-[ RECORD 37 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(4,4)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(3,1)","(5,2)","(3,3)","(4,1)","(5,3)","(4,5)","(2,4)","(1,2)"} |+-[ RECORD 38 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(4,4)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(3,1)","(5,2)","(3,3)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)","(2,2)","(1,4)"} |+-[ RECORD 39 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(4,4)","(5,2)","(3,1)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)","(3,3)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)"} |+-[ RECORD 40 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(4,4)","(5,2)","(3,3)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(3,1)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)"} |+-[ RECORD 41 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(4,4)","(5,2)","(3,3)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(3,1)","(1,2)","(2,4)","(4,5)","(5,3)","(4,1)","(2,2)","(1,4)"} |+-[ RECORD 42 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(5,3)","(4,1)","(2,2)","(1,4)","(3,5)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(3,1)","(5,2)","(4,4)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,3)","(1,2)","(2,4)","(4,5)"} |+-[ RECORD 43 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(5,3)","(4,1)","(2,2)","(1,4)","(3,5)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(3,1)","(5,2)","(4,4)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,3)","(4,5)","(2,4)","(1,2)"} |+-[ RECORD 44 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(5,3)","(4,1)","(2,2)","(1,4)","(3,5)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(4,4)","(5,2)","(3,1)","(1,2)","(2,4)","(4,5)","(3,3)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)"} |+-[ RECORD 45 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(5,3)","(4,1)","(2,2)","(1,4)","(3,5)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(4,4)","(5,2)","(3,1)","(1,2)","(2,4)","(4,5)","(3,3)","(5,4)","(4,2)","(2,1)","(1,3)","(2,5)"} |+-[ RECORD 46 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(5,3)","(4,1)","(2,2)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(4,4)","(5,2)","(3,1)","(1,2)","(2,4)","(4,5)","(3,3)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)"} |+-[ RECORD 47 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(5,3)","(4,1)","(3,3)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)","(2,2)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(4,4)","(5,2)","(3,1)","(1,2)","(2,4)","(4,5)"} |+-[ RECORD 48 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(5,3)","(4,5)","(2,4)","(1,2)","(3,3)","(4,1)","(2,2)","(1,4)","(3,5)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(3,1)","(5,2)","(4,4)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)"} |+-[ RECORD 49 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| lv | 24 || path | {"(1,1)","(3,2)","(5,3)","(4,5)","(2,4)","(1,2)","(3,3)","(4,1)","(2,2)","(4,3)","(5,5)","(3,4)","(1,5)","(2,3)","(3,1)","(5,2)","(4,4)","(2,5)","(1,3)","(2,1)","(4,2)","(5,4)","(3,5)","(1,4)"} |+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+Time: 12817.753 ms (00:12.818)