public NodePathFinderPlatformer bfs(NodePathFinderPlatformer node, NodePathFinderPlatformer target) { // return last node before reaching target if (node == target) { return(target); } List <NodePathFinderPlatformer> level = new List <NodePathFinderPlatformer>(); HashSet <NodePathFinderPlatformer> vis = new HashSet <NodePathFinderPlatformer>(); Queue <NodePathFinderPlatformer> q = new Queue <NodePathFinderPlatformer>(); q.Enqueue(node); vis.Add(node); while (q.Count > 0) { NodePathFinderPlatformer u = q.Peek(); q.Dequeue(); List <NodePathFinderPlatformer> adj = u.getAdjNodes(); foreach (NodePathFinderPlatformer v in adj) { if (v == target) { return(u); } if (!vis.Contains(v)) { vis.Add(v); q.Enqueue(v); } } } return(null); }