WoodMan 潛水喵 says to OwO
/js@mmis_js_bot function Dictonary(){ var items = {}; this.has = function(key){ return key in items; }; this.set = function(key, value){ items[key] = value; }; this.size = function(key, value){ items[key] = value; return value; }; this.get = function(key){ return this.has(key) ? items[key] : undefined; }; this.values = function(){ var values = {}; for (var k in items){ if (this.has(k)){ values.push(items[k]); } } }; this.getItems = function(){ return items; }; this.keys = function() { return Object.keys(items); }; this.size = function() { var count = 0; for(var prop in items) { if(items.hasOwnProperty(prop)) { ++count; } return count; } }; } function Graph(){ var vertives =[]; var adjList = new Dictonary(); this.addVertex = function(v){ vertives.push(v); adjList.set(v, []); }; this.addEdge = function(v, w){ adjList.get(v).push(w); adjList.get(w).push(v); }; this.toString = function(){ var s = ''; for (var i = 0; i < vertives.length; i ++){ s += vertives[i] + ' -> '; var neighbors = adjList.get(vertives[i]); for (var j = 0; j < neighbors.length; j ++){ s += neighbors[j] + ' '; } s += '\n'; } return s; }; var Breadthfirst = function(){ var color = []; for (var i = 0; i < vertives.length; i ++){ color[vertives[i]] = 'white'; } return color; }; this.dfs = function(callback){ var color = Breadthfirst(); for(var i = 0; i < vertives.length; i ++){ if(color[vertives[i]] === 'white'){ dfsVisit(vertives[i], color, callback); } } }; var dfsVisit = function(u, color, callback){ color[u] = 'grey'; if(callback){ callback(u); } var neighbors = adjList.get(u); for (var i = 0; i < neighbors.length; i ++){ var w = neighbors[i]; if(color[w] === 'white'){ dfsVisit(w, color, callback); } } color[u] = 'black'; }; } var graph = new Graph(); var list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']; for (var i = 0; i < list.length; i ++){ graph.addVertex(list[i]); } graph.addEdge('A', 'B'); graph.addEdge('A', 'C'); graph.addEdge('A', 'D'); graph.addEdge('A', 'E'); graph.addEdge('B', 'G'); graph.addEdge('C', 'F'); graph.addEdge('D', 'I'); graph.addEdge('F', 'H'); graph.addEdge('F', 'I'); graph.addEdge('G', 'H'); console.log(graph.toString()); function print(value){ console.log('Print ' + value); } graph.dfs(print);