 <p>A few suggestions:</p> <h2>ADJACENCY TEST</h2> <p>The test in FindAdjacent will only find diagonal neighbours at the moment</p> <pre><code> if (i != 0 &amp;&amp; j != 0) </code></pre> <p>If you also want to find left/right/up/down neighbours you would want to use</p> <pre><code> if (i != 0 || j != 0) </code></pre> <h2>ADJACENCY LOOP</h2> <p>I think your code looks suspicious in FindAdjacent at the line</p> <pre><code>for (vector&lt;Node*&gt;::iterator iter = mClosedList.begin(); iter != mClosedList.end(); iter++) </code></pre> <p>I don't really understand the intention here. I would have expected mClosedList to start empty, so this loop will never execute, and so nothing will ever get added to mOpenList.</p> <p>My expectation at this part of the algorithm would be for you to test for each neighbour whether it should be added to the open list. </p> <h2>OPENLIST CHECK</h2> <p>If you look at the <a href="http://en.wikipedia.org/wiki/A%2a_search_algorithm" rel="nofollow">A* algorithm on wikipedia</a> you will see that you are also missing the section starting</p> <pre><code>if neighbor not in openset or tentative_g_score &lt; g_score[neighbor] </code></pre> <p>in which you should also check in FindAdjacent whether your new node is already in the OpenSet before adding it, and if it is then only add it if the score is better.</p>