#include<bits/stdc++.h>
using namespace std;
#define max 100
typedef struct{
int N;
char A;
char B;
char C;
}Element;
typedef struct{
Element data[100];
int top=-1;
}Stack;
void push(Stack *s,Element p){
s->data[++(s->top)]=p;
}
Element pop(Stack *s){
s->top--;
return s->data[s->top+1];
}
void hanoi(int n){
Element p1,p2;
Stack s;
p1.A='a',p1.B='b',p1.C='c',p1.N=n;
push(&s,p1);
while(s.top!=-1){
p1=pop(&s);
if(p1.N==1){
printf("%c -> %c\n",p1.A,p1.C);
}else{
p2.N=p1.N-1,p2.A=p1.B,p2.B=p1.A,p2.C=p1.C;
push(&s,p2);
p2.N=1,p2.A=p1.A,p2.B=p1.B,p2.C=p1.C;
push(&s,p2);
p2.N=p1.N-1,p2.A=p1.A,p2.B=p1.C,p2.C=p1.B;
push(&s,p2);
}
}
}
int main()
{
int a;
cin>>a;
hanoi(a);
return 0;
}
是不是感觉代码挺长的???我们来看下递归版的,对比一下~
#include<bits/stdc++.h>
using namespace std;
void hanoi(int n,char a,char b,char c){
if(n){
hanoi(n-1,a,c,b);
printf("%c -> %c\n",a,c);
hanoi(n-1,b,a,c);
}
}
int main(){
int i;
cin>>i;
hanoi(i,'a','b','c');
return 0;
}