Skip to content

Commit e047dde

Browse files
committed
algorithms about graph
1 parent 72660ff commit e047dde

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed

Graph/Graph.html

+117
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
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

Comments
 (0)