root/trunk/sql/db2/shortestPath.sql

Revision 18, 0.8 KB (checked in by yabuki, 3 years ago)
Line 
1DROP PROCEDURE shortestPath@
2
3CREATE PROCEDURE shortestPath()
4BEGIN
5  DECLARE maxLength INT DEFAULT 1;
6  DECLARE oldSize INT;
7  DECLARE newSize INT DEFAULT 0;
8 
9  INSERT INTO paths SELECT head AS startNode,tail AS endNode,1 FROM edges;
10 
11  REPEAT
12    INSERT INTO paths
13      SELECT DISTINCT p.startNode AS startNode,tail AS endNode,maxLength+1 AS length
14      FROM paths p
15      JOIN edges ON p.endNode=head
16      WHERE p.length=maxLength
17        AND p.startNode!=tail
18        AND NOT EXISTS (
19          SELECT * FROM paths q
20          WHERE q.startNode=p.startNode AND q.endNode=tail);
21    COMMIT;
22    SET maxLength=maxLength+1;
23    SET oldSize=newSize;
24    SET newSize=(SELECT COUNT(*) FROM paths);
25  UNTIL oldSize=newSize
26  END REPEAT;
27END@
28
29DELETE FROM paths@
30
31CALL shortestPath()@
Note: See TracBrowser for help on using the browser.