1+ var expect = require ( 'chai' ) . expect ;
2+ var jsgraphs = require ( '../src/jsgraphs' ) ;
3+
4+ describe ( 'Topological Sort Shortest Path' , function ( ) {
5+ it ( 'should get shortest path from Weigthed Directed Acyclic Graph' , function ( ) {
6+ var g = new jsgraphs . WeightedDiGraph ( 8 ) ;
7+ g . addEdge ( new jsgraphs . Edge ( 0 , 1 , 5.0 ) ) ;
8+ g . addEdge ( new jsgraphs . Edge ( 0 , 4 , 9.0 ) ) ;
9+ g . addEdge ( new jsgraphs . Edge ( 0 , 7 , 8.0 ) ) ;
10+ g . addEdge ( new jsgraphs . Edge ( 1 , 2 , 12.0 ) ) ;
11+ g . addEdge ( new jsgraphs . Edge ( 1 , 3 , 15.0 ) ) ;
12+ g . addEdge ( new jsgraphs . Edge ( 1 , 7 , 4.0 ) ) ;
13+ g . addEdge ( new jsgraphs . Edge ( 2 , 3 , 3.0 ) ) ;
14+ g . addEdge ( new jsgraphs . Edge ( 2 , 6 , 11.0 ) ) ;
15+ g . addEdge ( new jsgraphs . Edge ( 3 , 6 , 9.0 ) ) ;
16+ g . addEdge ( new jsgraphs . Edge ( 4 , 5 , 5.0 ) ) ;
17+ g . addEdge ( new jsgraphs . Edge ( 4 , 6 , 20.0 ) ) ;
18+ g . addEdge ( new jsgraphs . Edge ( 4 , 7 , 5.0 ) ) ;
19+ g . addEdge ( new jsgraphs . Edge ( 5 , 2 , 1.0 ) ) ;
20+ g . addEdge ( new jsgraphs . Edge ( 5 , 6 , 13.0 ) ) ;
21+ g . addEdge ( new jsgraphs . Edge ( 7 , 5 , 6.0 ) ) ;
22+ g . addEdge ( new jsgraphs . Edge ( 7 , 2 , 7.0 ) ) ;
23+
24+ expect ( g . V ) . to . equal ( 8 ) ;
25+ var edgeCount = 0 ;
26+ for ( var v = 0 ; v < g . V ; ++ v ) {
27+ var adj_v = g . adj ( v ) ;
28+ edgeCount += adj_v . length ;
29+ }
30+ expect ( edgeCount ) . to . equal ( 16 ) ;
31+
32+ var ts = new jsgraphs . TopologicalSortShortestPaths ( g , 0 ) ;
33+
34+ for ( var v = 1 ; v < g . V ; ++ v ) {
35+ if ( ts . hasPathTo ( v ) ) {
36+ var path = ts . pathTo ( v ) ;
37+ console . log ( '=====path from 0 to ' + v + ' start==========' ) ;
38+ for ( var i = 0 ; i < path . length ; ++ i ) {
39+ var e = path [ i ] ;
40+ console . log ( e . from ( ) + ' => ' + e . to ( ) + ': ' + e . weight ) ;
41+ }
42+ console . log ( '=====path from 0 to ' + v + ' end==========' ) ;
43+ console . log ( '=====distance: ' + ts . distanceTo ( v ) + '=========' ) ;
44+ }
45+ }
46+ } ) ;
47+ } ) ;
0 commit comments