Skip to content

Instantly share code, notes, and snippets.

@cramforce
Forked from togi/gist:302086
Created February 17, 2010 19:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save cramforce/306946 to your computer and use it in GitHub Desktop.
Save cramforce/306946 to your computer and use it in GitHub Desktop.
var MAX_DEPTH = 3;
var findPath = function (source, target, u2f, visitor) { // u2f = user to friend
source = Graph.userToIndex(source);
target = Graph.userToIndex(target);
var dist = []
var prev = []
var queue = []
var seen = []
dist[source] = 0
prev[source] = source
queue[queue.length] = source
var len = 1;
while (len > 0) {
var cur = queue.shift() // pop the front element
--len;
var d = dist[cur]
if (cur == target) {
var path = []
var pos = target
while (prev[pos] != source) {
path.unshift({
user: pos
});
pos = prev[pos]
}
visitor(source, target, path)
continue;
//return d
}
if (d > MAX_DEPTH)
return d
var friends = u2f[cur];
if(!friends) continue;
for (var fi = friends.length; fi--; ) {
var next = friends[fi];
if(seen[next]) continue;
seen[next] = true;
var nextd = dist[next] ? dist[next] : 987654321 // inf
if (d + 1 < nextd) {
dist[next] = d + 1
prev[next] = cur
queue[len] = next
++len;
}
}
}
return dist[target]
}
findPath;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment