2017-05-09 81 views
0

我想用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; 
} 

我遇到的問題是創建這些對象並將它們插入到其他對象中,例如在「隊列」中存儲找到的座標並在「路徑」對象上堆疊「當前」對象。什麼是製作這個程序的正確方法?

對不起,長期以來的問題。

+0

歡迎來到Stack Overflow!看起來你可能會問作業幫助。雖然我們本身沒有任何問題,但請觀察這些[應做和不應該](http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions/338845#338845),並相應地編輯您的問題。 (即使這不是作業,也請考慮建議。) –

+0

@Joe C幫助請 – Kankz

+0

我想你誤解了Stack Overflow的含義。我們是一個問答網站。我們不是一個家庭作業寫作服務。你不能簡單地在這裏轉儲需求和代碼,喊「幫助!」,並期望我們神奇地修復它。 **這不會發生。**不僅對其他讀者沒有用處,對您沒有用處。 –

回答

0

第一件事:Java API中有Stack類。 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是其中之一:

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庫將處理算法細節。