#include <boost\graph\adjacency_list.hpp>
#include <boost\graph\astar_search.hpp>
#include <cassert>
#include <iostream>
typedef boost::adjacency_list<boost::listS, boost::vecS, boost::directedS> mygraph_t;
struct Goal_Found_Ex {};
template<class Vertex>
struct astar_vis : public boost::default_astar_visitor
{
astar_vis(Vertex goal)
: m_goal(goal)
{ }
template<typename Graph>
void examine_vertex(Vertex v, Graph const& g)
{
if ( v == m_goal )
throw Goal_Found_Ex();
}
Vertex m_goal;
};
int main()
{
mygraph_t graph;
mygraph_t::vertex_descriptor aVertex = boost::add_vertex(graph);
mygraph_t::vertex_descriptor bVertex = boost::add_vertex(graph);
mygraph_t::edge_descriptor edge; bool success;
boost::tie(edge, success) = boost::add_edge(aVertex, bVertex, graph);
assert(success);
try {
boost::astar_search(graph, aVertex, boost::astar_heuristic<mygraph_t, double>(),
boost::visitor(astar_vis<mygraph_t::vertex_descriptor>(aVertex)));
}
catch(Goal_Found_Ex gf)
{
gf;
std::cout << "Way found" << std::endl;
return 0x0;
}
std::cout << "Way not found" << std::endl;
return 0x1;
}
I2luY2x1ZGUgPGJvb3N0XGdyYXBoXGFkamFjZW5jeV9saXN0LmhwcD4KI2luY2x1ZGUgPGJvb3N0XGdyYXBoXGFzdGFyX3NlYXJjaC5ocHA+CiNpbmNsdWRlIDxjYXNzZXJ0PgojaW5jbHVkZSA8aW9zdHJlYW0+Cgp0eXBlZGVmIGJvb3N0OjphZGphY2VuY3lfbGlzdDxib29zdDo6bGlzdFMsIGJvb3N0Ojp2ZWNTLCBib29zdDo6ZGlyZWN0ZWRTPiBteWdyYXBoX3Q7CgoKc3RydWN0IEdvYWxfRm91bmRfRXgge307Cgp0ZW1wbGF0ZTxjbGFzcyBWZXJ0ZXg+CnN0cnVjdCBhc3Rhcl92aXMgOiBwdWJsaWMgYm9vc3Q6OmRlZmF1bHRfYXN0YXJfdmlzaXRvcgp7CiAgICBhc3Rhcl92aXMoVmVydGV4IGdvYWwpCgkJOiBtX2dvYWwoZ29hbCkKCXsgfQoKCXRlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPgoJdm9pZCBleGFtaW5lX3ZlcnRleChWZXJ0ZXggdiwgR3JhcGggY29uc3QmIGcpCgl7CgkJaWYgKCB2ID09IG1fZ29hbCApCgkJCXRocm93IEdvYWxfRm91bmRfRXgoKTsKCX0KCglWZXJ0ZXggbV9nb2FsOwp9OwoKaW50IG1haW4oKQp7CglteWdyYXBoX3QgZ3JhcGg7CgoJbXlncmFwaF90Ojp2ZXJ0ZXhfZGVzY3JpcHRvciBhVmVydGV4ID0gYm9vc3Q6OmFkZF92ZXJ0ZXgoZ3JhcGgpOwoJbXlncmFwaF90Ojp2ZXJ0ZXhfZGVzY3JpcHRvciBiVmVydGV4ID0gYm9vc3Q6OmFkZF92ZXJ0ZXgoZ3JhcGgpOwoKCW15Z3JhcGhfdDo6ZWRnZV9kZXNjcmlwdG9yIGVkZ2U7IGJvb2wgc3VjY2VzczsKCWJvb3N0Ojp0aWUoZWRnZSwgc3VjY2VzcykgPSBib29zdDo6YWRkX2VkZ2UoYVZlcnRleCwgYlZlcnRleCwgZ3JhcGgpOwoJYXNzZXJ0KHN1Y2Nlc3MpOwoKCgl0cnkgewoJCWJvb3N0Ojphc3Rhcl9zZWFyY2goZ3JhcGgsIGFWZXJ0ZXgsIGJvb3N0Ojphc3Rhcl9oZXVyaXN0aWM8bXlncmFwaF90LCBkb3VibGU+KCksIAoJCQlib29zdDo6dmlzaXRvcihhc3Rhcl92aXM8bXlncmFwaF90Ojp2ZXJ0ZXhfZGVzY3JpcHRvcj4oYVZlcnRleCkpKTsKCX0KCWNhdGNoKEdvYWxfRm91bmRfRXggZ2YpCgl7CgkJZ2Y7CgkJc3RkOjpjb3V0IDw8ICJXYXkgZm91bmQiIDw8IHN0ZDo6ZW5kbDsKCQlyZXR1cm4gMHgwOwoJfQoKCXN0ZDo6Y291dCA8PCAiV2F5IG5vdCBmb3VuZCIgPDwgc3RkOjplbmRsOwoJcmV0dXJuIDB4MTsKfQo=