Files
grokking_algorithms/06_breadth-first_search/javascript/01_breadth-first_search.js
2016-06-21 21:52:26 -07:00

42 lines
1.0 KiB
JavaScript

'use strict';
function person_is_seller(name) {
return name[name.length-1] === 'm';
}
const graph = {};
graph["you"] = ["alice", "bob", "claire"];
graph["bob"] = ["anuj", "peggy"];
graph["alice"] = ["peggy"];
graph["claire"] = ["thom", "jonny"];
graph["anuj"] = [];
graph["peggy"] = [];
graph["thom"] = [];
graph["jonny"] = [];
function search(name) {
let search_queue = [];
search_queue = search_queue.concat(graph[name]);
// This array is how you keep track of which people you've searched before.
const searched = [];
while (search_queue.length) {
let person = search_queue.shift();
// Only search this person if you haven't already searched them
if (searched.indexOf(person) === -1) {
if (person_is_seller(person)) {
console.log(person + ' is a mango seller!');
return true;
} else {
search_queue = search_queue.concat(graph[person]);
// Marks this person as searched
searched.push(person);
}
}
}
return false;
}
search('you'); // thom is a mango seller!