/ /スタック、キュー、および座標を使用してJavaでMazeソルバーを作成する方法 - java、ジェネリックス、スタック、キュー、迷路

Stack、Queue、Coordinateを使ってJavaでMazeソルバーを作成するには? - java、ジェネリックス、スタック、キュー、迷路

私はJavaでMazeソルバーを作成したいQueue、Stack、Coordinate(現在の[x、y]座標を格納します)の汎用クラスに従います。プログラムは、迷路を含むテキストファイルを読み込み、マトリックスに転送し、開始位置から、最終位置を見つけるまで空のスペースを検索して移動します。

これはテキストファイルです:

   5
8
########
E      #
### ####
### ####
###S####

Queueクラス、Stackクラス、およびCoordinateジェネリッククラスがプログラム内に存在する必要があるため、4つのオブジェクトを作成する必要があります。

"Path"と呼ばれるクラスStackの<Coordinate>オブジェクトとクラスのオブジェクト
stack <Queue <Coordinate>>は「可能性」と呼ばれ、両方とも40の座標(5 x 8 -
5行8列)。

クラスQueueの1つのオブジェクトは "queue"と呼ばれます。3つの座標を格納し、すべての4つの方向を検索するときに見つかる現在の位置の周りに空のスペースまたは文字「S」をキューに入れます。 (たとえば、最初の検索では、キューは次のようになります。[1,1]、1,1] 1,1は開始位置から最初に見つかった空白スペースで、これがキューに追加されます。

- 現在の位置を表す "現在"と呼ばれるCoordinateクラスの1つのオブジェクト。

5はライン数を表す。 8は列の数を表す。 char "#"は壁を表しています。 char "E"は開始位置、char "S"は終了、空白(char "")はwalkable spaceを表します。そこでプログラムは最初にテキストファイル上の迷路を指定された数の行と列(5と8)を持つ行列に転送し、開始位置であるchar "E"を見つけて "現在の"オブジェクトにその座標を格納します(ケースの(1,0))。

そこから、4つの方向をすべて検索します現在の位置を時計方向(上、右、下、左、この順)に並べて、「キュー」オブジェクト上にある空白(または文字「S」)の座標を記憶し、「待ち行列この座標を現在の位置を表す「現在の」オブジェクトに格納する。次に、行列上で、「現在の」オブジェクト(座標)によって表される位置にchar "*"を配置し、ステップが実行されたことを示します。次に、オブジェクト "current"を "path"オブジェクトに積み重ね、オブジェクト "possibilites"に "queue"オブジェクトを積み重ねます。 その後、出口(char "S")を見つけて、行列を出力してプログラムを終了するまで、これらのステップを繰り返します。

最後に、各位置に「*」とマークされているので、マトリックスは次のようになります。 (テキストファイルは変更されません)。

   5
8
########
E***   #
###*####
###*####
###S####

これまでは、クラスを作成しました。

キュー:

public class Fila <T> {
private Object[objfila] = null;
private int quantidade,posinicial,posfinal;
public void inserir(Object x) throws Exception
{
if(quantidade==objfila.length)
throw new Exception("Queue is full");
x=objfila(posfinal);
quantidade++;
posfinal++;
}
public void remover() throws Exception
{
if(quantidade==0){
throw new Exception("there are no elements on the queue");
}
quantidade--;
posinicial++;
}
public Fila(int capacidade)
{
this.posinicial=0;
this.posfinal=0;
Object objfila=new Object();
}
}

スタック:

public class Pilha <T> {
private Object[] objpilha = null;
private int topo;
public void inserir(T x) throws Exception
{
if(topo==objpilha.length-1){
throw new Exception("the stack is full.");
}
topo++;
objpilha[topo]=x;
}
public void remover() throws Exception
{
if(topo==-1){
throw new Exception("there are no elements to be removed.");
}
topo--;
}
public Pilha(int capacidade){
objpilha=new Object[capacidade];
topo=-1;
}
}

座標:(座標が格納されているxとyの配列があるはずです)

public class Coordenadas <T>{
private int x;
private int y;
}

私が問題を抱えているのは、それらのオブジェクトを他のオブジェクトに挿入します。見つかった座標を「キュー」に格納し、「現在の」オブジェクトを「パス」オブジェクトに積み重ねます。このプログラムを作成する正しい方法は何ですか?

長い質問を申し訳ありません。

回答:

回答№1は0

まず第一のもの: Stack Java APIのクラスザ Deque インターフェイスにはStackより少ししか含まれていません。あなたはどんな実装も開始することができます。 ArrayDeque

Deque<Point> stack = new ArrayDeque<>();
stack.push(new Point(2,3));
stack.push(new Point(2,4));
Point p = stack.pop(); // (2, 4)

同様に、 Queue 多数の実装とのインタフェース ArrayDeque それらの1つです:

Queue<Point> queue = new ArrayDeque<>();
queue.add(new Point(1, 2));
queue.add(new Point(1, 3));
Point p = queue.remove(); // (1, 2)

私は Point これらのトークンで使用するクラス。

結論:このクラスの上にあなたの迷路ソルバーを構築することができます。だからあなたは迷路解決に集中することができます。 Javaライブラリは、アルゴリズムの詳細を処理します。