2017-04-16 48 views
0

因此,我使用遞歸回溯創建迷宮生成算法。我跟蹤使用矩陣訪問堆棧中的點。該矩陣有兩列,一列用於x座標,另一列用於y座標。問題是,我的程序適用於小型迷宮,但對於大型迷宮,我的計算器耗盡內存。我想知道是否有更少的內存密集型方法來實現堆棧。我正在考慮使用字符串作爲可能的方式來做到這一點。順便說一下,我使用了ti-84 CSE。如何在ti-basic中實現低層棧

回答

3

您的堆棧應該可能使用列表來實現。我將使用L1進行演示。堆棧是後進先出的數據結構。 元素通過使用

L1(X) 

其中X是你想要的物品進行訪問。這意味着首先必須進入L1(1)(列表的開始;第一個項目),並且首先必須從列表中的最後項目出來。要了解有多少項目在列表中(因此找出第N項是最後一個)使用

dim(L1) 

這會給一些有多少項目有。我們可以使用它來始終訪問列表中的最後一項,而不是將它存儲到變量中。使用這個:

L1(dim(L1))->M 
//this addresses the item of L1 at dim(L1), meaning the last item 

現在M將具有最後一項的值。這是第一部分。然後,摧毀最後一個項目(因爲你彈出它關閉),這樣做:

dim(L1)-1->dim(L1) 

所以把他們放在一起,你的「啪」的代碼將是:

If dim(L1)>0 
Then 
// It checks if L1 has an element to pop off in the first place 
L1(dim(L1))->M 
dim(L1)-1->dim(L1) 
End 

現在,M將具有最後一個項目的值,並且最後一個項目被銷燬。現在,轉到推送代碼。推,你必須把你的號碼放入一個比舊的最後一個號碼更高的新號碼。從本質上講,您必須創建一個新的最後項目。幸運的是,TI-Basic非常簡單。您的「推」的代碼是:

If dim(L1)<99 
// It checks if L1 has less than the maximum number of elements, 
// which is 99. 
M->L1(dim(L1)+1) 

如果你會被存儲X/Y與堆疊座標,我建議的格式像這樣:

X + .01Y -> M 
//X=3, Y = 15 
// This would make M be 3.15 

而對於把它們分成兩個單獨的座標:

int(M)->X 
// The integer value of M is 3, which is what X was earlier 
100*fPart(M)->Y 
// The fraction part of M was .15. Multiply that by 100 to get 15, 
// which is what Y was earlier 
+0

爲教魚而不僅僅是給魚給魚的投票。 –

+0

@EastonBornemeier謝謝!我也對它進行了徹底的解釋,因爲我知道TI-Basic看起來像一團糟,除非先解釋清楚。 –

+0

@Stephen P謝謝!將2個座標合併爲一個數字確實是切肉刀。 – Meepo