2D Grid Map Connectivity Check (avoiding stack overflow)

Posted by SombreErmine on Game Development See other posts from Game Development or by SombreErmine
Published on 2013-10-25T23:44:21Z Indexed on 2013/10/26 4:12 UTC
Read the original article Hit count: 329

Filed under:
|
|
|
|

I am trying to create a routine in C++ that will run before a more expensive A* algorithm that checks to see if two nodes on a 2D grid map are connected or not. What I need to know is a good way to accomplish this sequentially rather than recursively to avoid overflowing the stack.


What I've Done Already

I've implemented this with ease using a recursive algorithm; however, depending upon different situations it will generate a stack overflow. Upon researching this, I've come to the conclusion that it is overflowing the stack because of too many recursive function calls. I am sure that my recursion does not enter an infinite loop.

I generate connected sets at the beginning of the level, and then I use those connected sets to determine connectivity on the fly later. Basically, the generating algorithm starts from left-to-right top-to-bottom. It skips wall nodes and marks them as visited. Whenever it reaches a walkable node, it recursively checks in all four cardinal directions for connected walkable nodes. Every node that gets checked is marked as visited so they aren't handled twice. After checking a node, it is added to either a walls set, a doors set, or one of multiple walkable nodes sets. Once it fills that area, it continues the original ltr ttb loop skipping already-visited nodes.

I've also looked into flood-fill algorithms, but I can't make sense of the sequential algorithms and how to adapt them.


Can anyone suggest a better way to accomplish this without causing a stack overflow?

The only way I can think of is to do the left-to-right top-to-bottom loop generating connected sets on a row basis. Then check the previous row to see if any of the connected sets are connected and then join the sets that are. I haven't decided on the best data structures to use for that though.

I also just thought about having the connected sets pre-generated outside the game, but I wouldn't know where to start with creating a tool for that.

Any help is appreciated. Thanks!

© Game Development or respective owner

Related posts about c++

Related posts about algorithm