DFS shortest path of a maze in C++ - c++

I'm having trouble figuring out how exactly to get this to work... I'm attempting to get the shortest path to the goal using a DFS. I know that BFS is better but I was asked to use DFS for this. As you can see, I attempt to make a comparison between all stacks that lead to the end to find the goal, but it does not work, only the first stack that leads to the goal is ever printed... I know somewhere I need to unvisit nodes, but I cannot figure out exactly how. Right now I do get a path to the goal, but not the shortest one. Any help with this would be greatly appreciated.

Writing a non-recursive DFS is possible by using your own stack, but I find the recursive solution to be more elegant. Here is a sketch of one:
DFS(vertex)
path.push_back(vertex)
visited[vertex] = true
if we found the exit
output path
else
for each neighbor v of vertex
if not visited[v]
DFS(v)
visited[vertex] = false
path.pop_back()

Related

Distinguish the output link of a Condition node

I am new to gojs and trying to play with flowchart example. The current example can't differentiate the output nodes of a Condition node and i want to fix it. Is there any way to distinguish them other than simple labeling them?
Thanks for pointing out the error in the sample. We have fixed the code in the sample -- please look again at the latest code at https://gojs.net/latest/samples/flowchart.html.

Using BFS/DFS to solve programming task

I am currently trying out Task #2 in the 2016/2017 COCI. Although I have attempted to solve this problem, I couldn't do it.
So, I looked at the solution and it said,
In order to solve this task, we need to find any path Barry can take
from the initial position to any position in the last column. We can
do this by using BFS or DFS algorithm, after which we need to
construct the path. Finally, all that’s left is to format the path
according to the task.
So I went ahead and studied the BFS and DFS algorithm. However, I am not sure how I can implement this algorithm into my program.
Although I can find certain elements in a tree with the algorithm, I don't know how to use it to find a pathway.
So can someone tell my, briefly, how to use the BFS/DFS algorithm to solve the programming problem?
Thanks in advance.
This is the contest page:
http://hsin.hr/coci/archive/2016_2017/contest1_tasks.pdf
What you could do is convert the whole map into a tree.
Here is a diagram I made to demonstrate what I exactly mean:Click here to view the image
Hope that made sense.

How to stop the OMPL planner after the first solution is found?

I'm using an RRTstar planner from OMPL.
To solve it I use:
ompl::base::PlannerStatus solved = setup.solve(time);
solve() takes a double time value to specify the requested running time of algorithm. How can I request stopping the algorithm right after the first valid solution is found ?
An instance of the class ompl::base::PlannerTerminationCondition can be passed to solve() as well, but I'm not sure how to use it and whether it would be used in this case.
Ok, Mark Moll answered this question in an email to me.
Most planners in OMPL stop after the first solution is found. But the asymptotically optimal planners like RRT* try to optimize the path as long as time permits. This behavior can be changed by calling setCostThreshold with a large value of the optimization objective (by default path length is minimized).

Find k shortest paths with graph-tool

I have a directed graph for which I am trying to find the top k shortest paths. At the moment I have implemented the network in graph-tool which provides a shortest path algorithm but no k shortest paths algorithm by what I can tell. I have come across this post (All shortest paths using graph_tool) but I am not after all paths connecting two nodes.
It seems as if NetworkX has a function implemented for this (https://networkx.readthedocs.org/en/stable/reference/generated/networkx.algorithms.shortest_paths.generic.all_shortest_paths.html?highlight=all_shortest_paths). Is there a way to somehow do this in graph-tool too or am I better off switching toolboxes and using NetworkX?
This is available in the git version: https://graph-tool.skewed.de/static/doc/dev/topology.html#graph_tool.topology.all_shortest_paths

Creating a graph using Boost Graph library

I am new to graph theory and graph concept.
I am workign on something, that requires me to create a mesh(Undirected graphs) with n number of nodes.
Once the structure is created, I would be running various algorithms on the structure, to find a shortest path from a node to other.
No for this I have decided to use Boost graph librabry.
I read through the online documentation. The online documentation is good but at the same time not sufficient.
I went through various examples online and everywhere, they import the graph from Graphviz.
If i am not wrong, we have to manually draw or write a dot program to get a graph in Graphviz and import in .dot format(Please correct me if i am wrong)
But is there a way in Boost where I could create a graph, instead of importing it from GraphViz?
And I would let user to decide the number of vertices in it, instead of pre-defining it.
Any help would be very much appreciated.
Thanks a ton in advance.
It's maybe not very correct, but I am giving a response a gave before.
https://stackoverflow.com/a/3100220/202083
You can see how to programmaticaly add nodes and edges.
I hope this is enough for you to get started.