2017-04-16 2 views
0

그래서 재귀 backtracking을 사용하여 알고리즘을 생성하는 미로를 만들고 있습니다. 행렬을 사용하여 스택에서 방문하는 점을 추적합니다. 이 행렬에는 x 좌표와 y 좌표에 대한 두 개의 열이 있습니다. 문제는 내 프로그램이 작은 미로에서 작동하지만 더 큰 미로는 내 계산기가 메모리가 부족하다는 것입니다. 스택을 구현하는 메모리 집약적 인 방법이 있는지 궁금합니다. 가능한 방법으로 문자열을 사용하려고 생각하고 있습니다. 나는 ti-84 CSE를 사용합니다.티 - 기본에서 낮은 momory 스택을 구현하는 방법

답변

3

스택은 아마도 목록을 사용하여 구현되어야합니다. 데모 용으로 L1을 사용하겠습니다. 스택은 후입 선출 형 데이터 구조입니다. 목록 요소 X가 원하는 항목이

L1(X) 

를 사용하여 액세스 할 수 있습니다. 이것은 첫 번째가 L1 (1) (목록의 시작, 첫 번째 항목) 이상으로 이동해야 함을 의미하며 첫 번째 항목은 목록의 마지막 항목에서 나와야합니다. 목록에 얼마나 많은 항목을 찾으려면이 얼마나 많은 항목의 수를 줄 것이다

dim(L1) 

를 사용하는 (따라서 N 번째 항목을 찾으 마지막입니다). 변수에 저장하는 대신 목록의 마지막 항목에 항상 액세스 할 수 있습니다. 이것을 사용하면 :

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