#include<stdio.h>voidhanoi(int disks,char sources,char temp,char target){if(disks ==1){printf("move disk from %c to %c \n", sources, target);printf("move disk from %c to %c \n", sources, target);}else{hanoi(disks -1, sources, target, temp);hanoi(1, sources, temp, target);hanoi(disks -1, temp, sources, target);}}voidhanoi2colors(int disks){char source ='A';char temp ='B';char target ='C';int i;for(i = disks /2; i >1; i--){hanoi(i -1, source, temp, target);printf("move disk from %c to %c \n", source, temp);printf("move disk from %c to %c \n", source, temp);hanoi(i -1, target, temp, source);printf("move disk from %c to %c \n", temp, target);}printf("move disk from %c to %c \n", source, temp);printf("move disk from %c to %c \n", source, target);}intmain(){int n;printf("请输入盘数:");scanf("%d",&n);hanoi2colors(n);return0;}
2.三色汉诺塔
#include<stdio.h>voidhanoi(int disks,char source,char temp,char target){if(disks ==1){printf("move disk from %c to %c \n", source ,target);printf("move disk from %c to %c \n", source ,target);printf("move disk from %c to %c \n", source ,target);}else{hanoi(disks -1, source, target, temp);hanoi(1, source, temp, target);hanoi(disks -1, temp, source, target);}}voidhanoi3colors(int disks){char source ='A';char temp ='B';char target ='C';int i;if(disks ==3){printf("move disk from %c to %c \n", source , temp);printf("move disk from %c to %c \n", source , temp);printf("move disk from %c to %c \n", source , target);printf("move disk from %c to %c \n", temp , target);printf("move disk from %c to %c \n", temp , source);printf("move disk from %c to %c \n", target , temp);}else{hanoi(disks /3-1, source, temp, target);printf("move disk from %c to %c \n", source, temp);printf("move disk from %c to %c \n", source, temp);printf("move disk from %c to %c \n", source, temp);hanoi(disks /3-1, target, temp, source);printf("move disk from %c to %c \n", temp , target);printf("move disk from %c to %c \n", temp , target);printf("move disk from %c to %c \n", temp , target);hanoi(disks /3-1, source, target, temp);printf("move disk from %c to %c \n", target , temp);printf("move disk from %c to %c \n", target , temp);hanoi(disks /3-1, temp, source, target);printf("move disk from %c to %c \n", source , temp);for(i = disks /3-1; i >0; i--){if(i >1){hanoi(i -1, target, source, temp);}printf("move disk from %c to %c \n", target, source);printf("move disk from %c to %c \n", target, source);if(i >1){hanoi(i -1, temp, source, target);}printf("move disk from %c to %c \n", source, temp);}}}intmain(){int n;printf("请输入盘数:");scanf("%d",&n);hanoi3colors(n);return0;}