1
+ <!DOCTYPE html>
2
+ < html >
3
+ < head >
4
+ < meta charset ="utf-8 ">
5
+ < title > Graph</ title >
6
+ < script type ="text/javascript ">
7
+ function MapDictinary ( ) {
8
+ var items = { } ;
9
+
10
+ //向字典中添加新元素
11
+ this . set = function ( key , value ) {
12
+ items [ key ] = value ;
13
+ } ;
14
+
15
+ //移除
16
+ this . remove = function ( key ) {
17
+ if ( this . has ( key ) ) {
18
+ delete items [ key ] ;
19
+ return true ;
20
+ }
21
+ return false ;
22
+ } ;
23
+
24
+ //查询是否有指点key
25
+ this . has = function ( key ) {
26
+ return key in items ;
27
+ } ;
28
+
29
+ //查询
30
+ this . get = function ( key ) {
31
+ return this . has ( key ) ? items [ key ] : undefined ;
32
+ } ;
33
+
34
+ this . clear = function ( ) {
35
+ items = { } ;
36
+ } ;
37
+
38
+ this . size = function ( ) {
39
+ return Object . keys ( items ) . length ;
40
+ } ;
41
+
42
+ //将字典中所有的键名以数组形式返回
43
+ this . keys = function ( ) {
44
+ return Object . keys ( items ) ;
45
+ } ;
46
+
47
+ //将字典中所有的数值以数组形式返回
48
+ this . values = function ( ) {
49
+ var values = [ ] ;
50
+ for ( var prop in items ) {
51
+ if ( this . has ( prop ) ) {
52
+ values . push ( items [ prop ] ) ;
53
+ }
54
+ }
55
+ return values ;
56
+ } ;
57
+
58
+ this . getItems = function ( ) {
59
+ return items ;
60
+ } ;
61
+ }
62
+
63
+ function Graph ( ) {
64
+ var vertices = [ ] ;
65
+ var adjList = new MapDictinary ( ) ;
66
+
67
+ //先图中添加新节点
68
+ this . addVertex = function ( v ) {
69
+ vertices . push ( v ) ;
70
+ adjList . set ( v , [ ] ) ;
71
+ } ;
72
+
73
+ //添加边
74
+ this . addEdge = function ( v , w ) {
75
+ //无向图添加v到w 与 w到v两条边
76
+ adjList . get ( v ) . push ( w ) ;
77
+ adjList . get ( w ) . push ( v ) ;
78
+ } ;
79
+
80
+ this . toString = function ( ) {
81
+ var s = '' ;
82
+ for ( var i = 0 ; i < vertices . length ; i ++ ) {
83
+ s += vertices [ i ] + ' -> ' ;
84
+ var neighbors = adjList . get ( vertices [ i ] ) ;
85
+ for ( var j = 0 ; j < neighbors . length ; j ++ ) {
86
+ s += neighbors [ j ] + ' ' ;
87
+ }
88
+ s += '\n' ;
89
+ }
90
+ return s ;
91
+ } ;
92
+ }
93
+
94
+ var graph = new Graph ( ) ;
95
+ var myVertuces = [ 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' ] ;
96
+ for ( var i = 0 ; i < myVertuces . length ; i ++ ) {
97
+ graph . addVertex ( myVertuces [ i ] ) ;
98
+ }
99
+
100
+ graph . addEdge ( 'A' , 'B' ) ;
101
+ graph . addEdge ( 'A' , 'C' ) ;
102
+ graph . addEdge ( 'A' , 'D' ) ;
103
+ graph . addEdge ( 'C' , 'D' ) ;
104
+ graph . addEdge ( 'C' , 'G' ) ;
105
+ graph . addEdge ( 'D' , 'G' ) ;
106
+ graph . addEdge ( 'D' , 'H' ) ;
107
+ graph . addEdge ( 'B' , 'E' ) ;
108
+ graph . addEdge ( 'B' , 'F' ) ;
109
+ graph . addEdge ( 'E' , 'I' ) ;
110
+
111
+ console . log ( graph . toString ( ) ) ;
112
+ </ script >
113
+ </ head >
114
+ < body >
115
+
116
+ </ body >
117
+ </ html >
0 commit comments