You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.5 KiB
JavaScript

(function (exports) {
'use strict';
var dfs = (function () {
function hasPath(graph, current, goal) {
var stack = [];
var visited = [];
var node;
stack.push(current);
visited[current] = true;
while (stack.length) {
node = stack.pop();
if (node === goal) {
return true;
}
for (var i = 0; i < graph[node].length; i += 1) {
if (graph[node][i] && !visited[i]) {
stack.push(i);
visited[i] = true;
}
}
}
return false;
}
/**
* Depth-First graph searching algorithm.
* Returns whether there's a path between two nodes in a graph.<br><br>
* Time complexity: O(|V|^2).
*
* @module graphs/searching/dfs
* @public
* @param {Array} graph Adjacency matrix, which represents the graph.
* @param {Number} start Start node.
* @param {Number} goal Target node.
* @return {Boolean} Returns true if path between two nodes exists.
*
* @example
* var dfs = require('../src/graphs/searching/dfs').dfs;
* var graph = [[1, 1, 0, 0, 1, 0],
* [1, 0, 1, 0, 1, 0],
* [0, 1, 0, 1, 0, 0],
* [0, 0, 1, 0, 1, 1],
* [1, 1, 0, 1, 0, 0],
* [0, 0, 0, 1, 0, 0]];
* var pathExists = dfs(graph, 1, 5); // true
*/
return function (graph, start, goal) {
return hasPath(graph, start, goal);
};
}());
exports.dfs = dfs;
}(typeof exports === 'undefined' ? window : exports));