Sign in to follow this  
Silgen

A* Implementation Question

Recommended Posts

I have been reading about the A* algorithm recently, and I want to implement it myself to make sure that I fully understand it. What is the best way of representing the map that will be searched? Array? A tree of some kind?

Share this post


Link to post
Share on other sites
Okay - then perhaps my question should have been - which representation of the search space will make running the A* algorithm on it easiest? What method is most commonly used?

Share this post


Link to post
Share on other sites
[quote name='SiCrane' timestamp='1353782646' post='5003793']
There is no best way. Representation of the search space is orthogonal to functioning of the A* algorithm.
[/quote]

I am not sure that is entirely true. Whatever algorithm you are going to use determines what types of accesses to the data you are going to be doing most frequently, and thus what representation might work best.

In the case of A*, however, all you need from the graph is iterating through the nodes that are connected to a given node, which is the most basic thing you can ask from a graph. If your map is a grid (like in an RTS), the obvious array is a perfectly good representation. If not, a sparse graphs (with lists of connections for each node) is probably what I would use.

Share this post


Link to post
Share on other sites
Hello
If you have a square map with tiles, you can use a 2d array. Each element will of the array can contain some information about the space it represents. Let's say you have a room of bricks, and the bricks are perfectly aligned to each other; element [3][4] will represent the brick whose upper left corner is at position
(x = 4*BRICK_WIDTH, y = 3*BRICK_HEIGHT).

Share this post


Link to post
Share on other sites
[quote name='Silgen' timestamp='1353783088' post='5003795']
Okay - then perhaps my question should have been - which representation of the search space will make running the A* algorithm on it easiest? What method is most commonly used?
[/quote]
You're looking at it from the wrong direction. Come up with a situation where you would want to use pathfinding. Create a representation suitable for that situation, and then figure out how to use A* with that representation.

[quote name='Álvaro' timestamp='1353783390' post='5003796']
In the case of A*, however, all you need from the graph is iterating through the nodes that are connected to a given node, which is the most basic thing you can ask from a graph.[/quote]
Which is why I think that representation is orthogonal to A*. If you've got a representation where you can't efficiently determine node transitions, then you're representation will also be inefficient for pretty much any operation, not just search algorithms. Obviously, if you're going to choose a representation for the search space which is inefficient for general use, then of course it's going to be sub optimal for A*. The point is to come up with a representation that makes sense for the system being modeled.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this