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);
    }