2017-05-31 3 views
0

Ich entwickle ein Labyrinth-Solver-Programm, das grundsätzlich ein Labyrinth aus einer Textdatei liest, die vom Anfangspunkt alle Seiten um es herum prüft und sich zu Freiräumen bewegt, die vorherige Position markiert und endet, wenn der Exit gefunden wird.Wie generische Klassen verwenden, um ein Labyrinth zu lösen?

Während der Algorithmus selbst bereits abgeschlossen ist, gibt es einige Dinge, die ich gerne geklärt werden möchte. Das Programm benötigt die generischen Klassen Stack, Queue und Coordinates (die die aktuelle x, y - Koordinate speichert), die ich nicht verwendet habe (ich habe Vektoren zum Speichern der Positionen verwendet) und andere Operationen wie das Stapeln einer Queue innerhalb der Stapel.

Dies ist die Hauptschleife:

if(maz[x][y-1]==' '||maz[x][y-1]=='S'){ 
    if(maz[x][y-1]=='S') 
     exitfound=true; 
    maz[x][y]='*'; 
    maz[x][y-1]='@'; 
    y=y-1; 
} 

Es wenn die obige Koordinatenprüft wird entweder ein offener Raum oder der Ausgang (‚S‘), wenn es wahr ist, ist es es sich bewegt, während die vorherige Positionsmarkierung mit einem * und der Position, zu der es sich bewegt, mit einem '@'. Dies wiederholt sich auch bei den anderen 3 Seiten. Am Ende des Programms wären alle begehbaren Räume mit * markiert worden. Allerdings muss ich diese generischen Klassen verwenden, um Koordinaten zu manipulieren.

Das sind die erforderlichen Klassen und ihre Objekte:

Stack<Coordinate> path = new Stack<Coordinate>(40); 
Stack<Queue<Coordinate>> possibilities = new Stack<Queue<Coordinate>>(40); 
Coordinate current = new Coordinate(x,y); 
Queue<Coordinate> queue = new Queue<Coordinate>(3); 

Ich verstehe nicht, wie man auf dem current Objekt zu speichern, koordiniert und Einsatzkoordinaten im queue Objekt der Klasse Queue<Coordinate> und stapeln queue Objekt auf der possibilities Objekt, aus der Klasse . Wie wird das gemacht?

Antwort

0

können Sie in eine Warteschlange hinzufügen mit:

queue.add(coordinate); 

A queue ist wie eine Linie in einem Themenpark. Die erste Person ist die erste Person (FIFO). A stack ist wie ein Stapel Platten. Die erste Platte, die Sie abgelegt haben, ist die letzte, die Sie verwenden. Last-in, zuerst-aus (LIFO).

Javadoc: Stack, Queue

+0

Das ist meine Frage was't. – Kreator

+0

Möchten Sie wissen, wie Sie ein Element zur Warteschlange und zum Stack hinzufügen? – screenmutt

+0

Hinzufügen von Koordinaten (zB: 3,4) zu den Klassen Coordinate, Stack und Queue. – Kreator

Verwandte Themen