//以下代碼生成訪問衝突或分段錯誤 //我正在尋找河內塔的簡單解決方案,我應該自己寫 //請註明以下代碼漏洞,而不是給你的精英代碼:)河內遞歸塔,訪問衝突/分段錯誤,在dev C++編譯器上
//使用三個棧
#include <iostream>
using namespace std;
#define max 50
typedef struct stack{ //union?
int tos;
int els[max]; //stack->els[1] = tos
}stack; //template stack?
void toh(int, stack * , stack *, stack *);
void display(stack *);
int main(){
cout<<"Enter the number of discs (<=50) in Tower of Hanoi\n";
int n;
cin>>n;
stack *A,*B,*C;
toh(n, A,B,C);
system("pause");
return 0;
}
void toh(int n, stack *A, stack *B, stack *C){
if (n == 1) {
int temp = A->els[A->tos]; //switch case i=1,2,3 tos[i]
A->tos -= 1; //OR stack * A, A->tos?
C->tos += 1;
C->els[C->tos] = temp;
// push the popped item in stack C
cout<<"A\t";
display(A);
cout<<"\nB\t";
display(B);
cout<<"\nC\t";
display(C);
}
else {
toh(n-1, A, C, B);
toh(1, A, B, C);
toh(n-1, B, A, C);
}
}
void display(stack * X){ //and not int[] stack
cout<<"The stack elements are :\n";
for(int i = 1; i <= X->tos; i++){//impo to start with 1 if tos = 0 init
cout<<X->els[i];
cout<<"\t";
}
}
什麼是在進入'toh'遞歸A,B,C的值,在你看來? – 2013-03-18 18:41:41
Steve向你暗示,你的程序永遠不會創建一個'stack'。 – 2013-03-18 18:50:00
輸入no後,運行時異常很快發生。在我的情況下,光盤的數量是3,程序只是掛起.A,B,C是作爲堆棧實現的塔,A應該包含3個光盤,如3,2,1從下到上(如果我們假設3> 2> 1代表較大盤>中等>更小),對於B和C,它們每個都有3個NULL值。 – user1776433 2013-03-18 18:52:09