当前位置:文档之家› 汉诺塔问题的非递归实现

汉诺塔问题的非递归实现

汉诺塔问题的非递归实现
汉诺塔问题的非递归实现

汉诺塔问题的非递归实现

#include

#include

#include

//第0位置是柱子上的塔盘数目

int zhua[100]={0},zhub[100]={0},zhuc[100]={0};

char charis(char x,int n)

//左右字符出现顺序固定,且根据n值奇偶而不同

{

switch(x)

{

case 'A':

return (n%2==0)?'C':'B';

case 'B':

return (n%2==0)?'A':'C';

case 'C':

return (n%2==0)?'B':'A';

default:

return '0';

}

}

void print(char lch,char rch)

//打印字符

{

if(lch=='A')

{

switch(rch)

{

case 'B':

zhub[0]++;

zhub[zhub[0]]=zhua[zhua[0]];

zhua[zhua[0]]=0;

zhua[0]--;

break;

case 'C':

zhuc[0]++;

zhuc[zhuc[0]]=zhua[zhua[0]];

zhua[zhua[0]]=0;

zhua[0]--;

break;

default:

break;

}

}

if(lch=='B')

{

switch(rch)

{

case 'A':

zhua[0]++;

zhua[zhua[0]]=zhub[zhub[0]]; zhub[zhub[0]]=0;

zhub[0]--;

break;

case 'C':

zhuc[0]++;

zhuc[zhuc[0]]=zhub[zhub[0]]; zhub[zhub[0]]=0;

zhub[0]--;

break;

default:

break;

}

}

if(lch=='C')

{

switch(rch)

{

case 'A':

zhua[0]++;

zhua[zhua[0]]=zhuc[zhuc[0]]; zhuc[zhuc[0]]=0;

zhuc[0]--;

break;

case 'B':

zhub[0]++;

zhub[zhub[0]]=zhuc[zhuc[0]]; zhuc[zhuc[0]]=0;

zhuc[0]--;

break;

default:

break;

}

}

printf("\t");

int i;

相关主题
文本预览
相关文档 最新文档