?
Fuer Baeume in Compilern etc. nimmt man m.E. am besten Rekursionen. Sollte auch hier funktionieren. Bevor Du einen Zweig gehst, markierst Du ihn, damit Du weisst, ob Du schonmal dagewesen bist. Dann kannst Du geschlossene Graphen parsen.
class GraphNode {
public:
enum DIR { UP, DOWN, LEFT, RIGHT, NUMDIRS };
GraphNode* branch[NUMDIRS];
bool here;
// ...
GraphNode( void ) {
for ( int i=0; i < NUMDIRS; ++i ) branch[i] = 0;
here = false;
}
// ...
void parseNode( void ) {
if ( here ) return;
here = true;
for ( int i=0; i < NUMDIRS; ++i ) {
if ( branch[i] ) branch[i]->parseNode();
}
here = false;
}
Wenn sich's nur um Labyrinthe und nicht um eine Baum-Uebung dreht, dann kannst Du auch ein Array (Vektor), wie bereits vorgeschlagen, nehmen.
Wen ich sowas programmiere, z.B. fuer 2D-Spiele, nehm ich immer eine Bitmap, in der nur die Waende markiert sind. Kollisionspruefungen sind damit einfach und schnell.
Falls es sich nur darum geht, Graphen und Baeume zu implementieren, wuerde ich Dir vorschlagen, dass Du Dich mal mit Rekursionen auseinandersetzt -- sehr praktische Angelegenheit!