| Origin: | Destination: |
| A | B |
| A | C |
| B | C |
| C | D |
CREATE TABLE flights(origin varchar(5),destination varchar(5));
INSERT INTO flights values('A','B'),('A','C'),('B','C'),('C','D');
找到所有(O->D),(出发点,起始点)
方法一(union):
需要找‘直达’+‘一次中转’+’两次中转‘+.....
为求简单只写了一次中转(..:..)
方法二(recursion):
注:在oracle和sqlserver中recursive被省略。
step 0:reach被初始化为空集合;
step i:reach(x,y):-flights(x,y)
reach(x,y):-flights(x,z),reach(z,y)
step end:当reach集合不再变化。