forked from Graph-Visualization/graph-api
-
Notifications
You must be signed in to change notification settings - Fork 0
/
graph-base.js
126 lines (113 loc) · 2.83 KB
/
graph-base.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// Base class for Graph and Edge objects
//
/**LinkedList for an edge
* Initialises an Edge which stores data
* and pointer to the next Edge
* Defaults to null
*/
class Edge {
/**
* Class for creating an edge which is an
* object containing src, dest and weight
*/
constructor() {
this.src = null;
this.dest = null;
this.weight = null;
}
}
Edge.prototype.inspect = function () {
return ` [src : ${this.src} dest: ${this.dest} weight:${this.weight} ]`;
};
class GraphBase {
/**
*
* @param {integer} numVertices
* @param {integer} numEdges
*
* This class stores a graph object
* having v vertices and e edges
* There is adjacency list to store
* all the corresponding Edge object
* This implements an undirected graph
* For directed graph the addEdge needs
* to be overloaded
*/
constructor(numVertices = 0) {
this.numVertices = numVertices;
this.adj = new Map();
// this.Adj = this.getSimpleAdj()
}
/**
*
* @param {Array} vertex
* Function to add the total vertex in a graph
* Stores a map in which each vertex points to all other vertices
*/
addVertex(vertex) {
this.adj.set(vertex, []);
}
/**
*
* @param {integer} vertices1
* @param {integer} vertices2
* @param {integer} weight
*
* Attach an edge to the adjacency list
* Uses a weighted and directed graph
*/
addEdge(vertices1, vertices2, weight) {
const edge1 = new Edge();
edge1.src = vertices1;
edge1.dest = vertices2;
edge1.weight = weight;
this.adj.get(vertices1).push(edge1);
}
getSimpleAdj() {
let Adj = new Map();
let mp = this.adj;
// console.log(this.adj)
// Object.assign(mp, this.adj)
// console.log(mp)
mp.forEach(function (value, key) {
// console.log("K"+key+"V"+value)
Adj.set(key, []);
});
// console.log(mp)
mp.forEach(function (value, key) {
// value = ;
// console.log(mp[key]);
// Adj.set(key, [])
// console.log(value)
for (let i = 0; i < value.length; i++) {
let val = value[i];
Adj.get(val.src).push(val.dest);
// Adj.get(val.dest).push(val.src)
}
// value.forEach((val) => {
// console.log(Adj.get(val))
// Adj.get(val.src).push(val.dest)
// Adj.get(val.dest).push(val.src)
// })
});
// console.log(Adj)
this.Adj = Adj;
return Adj;
}
}
// const graph = new GraphBase(4)
// vertices = [0,1,2,3]
// for(let i=0;i<vertices.length;i++)
// {
// graph.addVertex(vertices[i])
// }
// // console.log(graph.adj.get(v[0]).push(9))
// graph.addEdge(0 ,1 , 5);
// graph.addEdge(0,2,4)
// // // console.log(graph)
// graph.addEdge(1 ,2 , 4);
// // // console.log(graph)
// graph.addEdge(2 ,3 , 3);
// graph.addEdge(3 ,0 , 2);
// console.log(graph.getSimpleAdj())
module.exports = GraphBase;