JSFiddle - React, Tailwind, and code Playground
JavaScript
function Graph (v) {
this.vertices = v;
this.edges = 0;
this.adj = [];
this.marked = [];
this.addEdge = addEdge;
this.showGraph = showGraph;
this.dfs = dfs;
this.init = init;
this.edgeTo = [];
this.hasPathTo = hasPathTo;
this.pathTo = pathTo;
this.printPath = printPath;
}
function addEdge(v,w) {
this.adj[v].push(w);
this.adj[w].push(v);
this.edges++;
}
function showGraph() {
var str = "";
for(var i = 0; i < this.vertices; ++i) {
str = i + "-->";
for(var j = 0; j < this.vertices; ++j) {
if(this.adj[i][j] != undefined) {
str += this.adj[i][j] + " ";
}
}
console.log(str);
}
}
function init() {
for(var i = 0; i < this.vertices; ++i) {
this.adj[i] = [];
this.marked[i] = false;
}
}
function dfs(s) {
var queue = [],adj = this.adj[s],nextAdj;
this.marked[s] = true;
queue.push(s);
while(queue.length > 0) {
var v = queue.shift();
if(v != undefined) {
console.log("Visited vertex: " + v);
}
adj = this.adj[v];
for(var w in adj) {
var nextAdj = this.adj[v][w];
if(!this.marked[nextAdj]) {
this.edgeTo[nextAdj] = v;
this.marked[nextAdj] = true;
queue.push(nextAdj);
}
}
}
}
function pathTo(s,v) {
this.dfs(s);
if(!this.hasPathTo(v)) {
return undefined;
}
var path = [];
for(var i = v;i != s; i = this.edgeTo[i]) {
path.push(i);
}
path.push(s);
this.printPath(path);
}
function hasPathTo(v) {
return this.marked[v];
}
function printPath(paths) {
var str = "";
while(paths.length > 0) {
if(paths.length > 1) {
str += paths.pop() + "-";
} else {
str += paths.pop();
}
}
console.log(str);
}
var g = new Graph(7);
g.init();
g.addEdge(0,1);
g.addEdge(0,2);
g.addEdge(0,3);
g.addEdge(1,4);
g.addEdge(2,5);
g.addEdge(4,6);
g.addEdge(0,6);
g.showGraph();
var paths = g.pathTo(0,6);