我想用Java創建一個迷宮求解器,使用下列泛型類:隊列,堆棧和座標(存儲當前的[x,y]座標)。該程序讀取包含迷宮的文本文件,將其轉換爲矩陣,然後從起始位置搜索並移至空白空間,直至找到最終位置。如何使用堆棧,隊列和座標在Java中創建迷宮求解器?
這是文本文件:
5
8
########
E #
### ####
### ####
###S####
,因爲隊列,堆棧和座標通用類都必須存在在節目中,4個對象必須創建:
-One對象的類的堆棧<座標>稱爲「路徑」和類
堆棧<隊列的一個目的<座標>>稱爲「的可能性」,既能夠存儲40個的座標(5×8 -
5行和8列);
- 隊列中的一個對象叫做「隊列」,它存儲3個座標,並在搜索所有4個方向時在當前位置周圍排隊空白或字符'S'。 (例如,在第一次搜索中,隊列將是:[(1,1),] 1,1是從開始位置找到的第一個空白空間,然後將其添加到隊列中。)
- 座標類的一個對象稱爲「當前」,它表示當前位置。
5代表行數。 8表示列數。字符'#'代表一堵牆,一個不可通行的地形。字符'E'是開始位置,字符'S'是出口,空白(char'')表示可行走的空間。因此,程序首先將文本文件上的迷宮轉移到具有指定行數和列數的矩陣(5和8)上,然後查找作爲開始位置的字符'E'並實例化「當前」對象,將其座標存儲在其上((1,0)中的情況)。
從那裏開始,按照順時針方向(向上,向右,向下和向左依次)搜索所有4個方向,並存儲在「隊列」對象,並從「隊列」中移除第一個座標,將此座標存儲在表示當前位置的「當前」對象上。然後,在矩陣上,在由「當前」對象(座標)表示的位置放置一個字符'*',表示已經採取了一個步驟。然後,將對象「當前」堆疊在「路徑」對象上,並將「隊列」對象堆疊到「可能」對象上。 然後重複這些步驟直到找到出口(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;
}
我遇到的問題是創建這些對象並將它們插入到其他對象中,例如在「隊列」中存儲找到的座標並在「路徑」對象上堆疊「當前」對象。什麼是製作這個程序的正確方法?
對不起,長期以來的問題。
歡迎來到Stack Overflow!看起來你可能會問作業幫助。雖然我們本身沒有任何問題,但請觀察這些[應做和不應該](http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions/338845#338845),並相應地編輯您的問題。 (即使這不是作業,也請考慮建議。) –
@Joe C幫助請 – Kankz
我想你誤解了Stack Overflow的含義。我們是一個問答網站。我們不是一個家庭作業寫作服務。你不能簡單地在這裏轉儲需求和代碼,喊「幫助!」,並期望我們神奇地修復它。 **這不會發生。**不僅對其他讀者沒有用處,對您沒有用處。 –