2012-04-10 1 views
0

Wie kann ich über ein vierfach verknüpftes 2-dimensionales Datenraster iterieren, als wäre es ein 2-dimensionales Array?Wie kann ich über ein vierfach verknüpftes 2-dimensionales Datenraster iterieren, als wäre es ein 2-dimensionales Array?

Meine Gitterstruktur ist:

typedef bool tile; 

struct BLOCK; 
typedef struct BLOCK block; 

struct BLOCK { 
const block * to_the_left; 
const block * above; 
const block * to_the_right; 
const block * below; 

tile data; 
}; 

typedef struct { 
const block * start; 
} map; 

Ich brauche über dieses Gitter, wie es zu durchlaufen zu können, ein 2-dimensionales Array ist, so kann ich Fliesen der Karte um den Startblock Zentrierung auf dem Bildschirm angezeigt werden .

P. S. S. Ich würde am liebsten eine Lösung in C sehen (das ist, was ich für dieses Projekt kodiere), C++, Haskell oder Java-Code, da dies Sprachen sind, die ich gut kenne, aber jede Sprache ist in Ordnung. Ich brauche nur den Algorithmus.

P.S.S.S. Zur Verdeutlichung, indem ich wie ein 2-dimensionales Array über iteriere, bedeute ich, dass ich einen Index in die x- und y-Position als Variablen bekommen muss. Zum Beispiel muss ich mvaddch aufrufen (y, x, '#').

Antwort

1

dies in der gleichen Reihenfolge durchlaufen werden, als ob es sich um eine 2-dimensionale Array waren

BLOCK * process = upper_left_block; 
    BLOCK * leftmost = process; 
    while(true) 
    { 
     //<do stuff here> 
     process = process->to_the_right; 
     if(process == null) 
     { 
      process = leftmost->below; 
      leftmost = process; 
     } 
     if(process == null) 
      break; 
    } 
+0

Added eine Erklärung, was ich oben benötigen, muss ich x und y als auch Variablen. –

+0

Ich habe das getestet und es funktioniert fast, hört aber nicht auf, wenn ich den Boden erreiche. Ich denke, ich werde es beheben können. Bearbeiten: NVM. Es ist ein Fehler beim Generieren der Grids. –

+0

Ahah! Ich habe den Fehler gefunden. Die kleine Zeile von links = Prozess sollte nach dem Setzen von Prozess = am weitesten links -> unten enthalten sein. Ich kenne die Etikette dafür nicht. Wenn ich darauf warten sollte, dass du die Zeile änderst, akzeptiere ich den Beitrag, wenn ich den Beitrag bearbeiten und ihn in die Bearbeitungs-Warteschlange stellen oder etwas anderes machen soll. –

Verwandte Themen