The Towers of Hanoi is well-known game, played with
three poles and a number of different-sized disks. Each disk has a hole
in the center, allowing it to be stacked around any of the poles.
Initially, the disks are stacked on the leftmost pole in the order of
decreasing size, i.e., the largest on the bottom and the smallest on the
top, as shown in the figure below.
The
objective of the game is to transfer the disks from the leftmost pole
to the rightmost pole, without ever placing a larger disk, on the top of
a smaller disk. Only one disk may be moved at a time, and each disk
must always be placed around one of the poles. The general strategy is
to consider one of the poles to be the origin, and another to be the
destination. The third pole will be used for intermediate storage, thus
allowing the disks to be moved without placing a larger disk over a
smaller disk. Assume there are n disks, numbered from smallest to
largest, as above figure. If th disks are initially stacked on the left
pole, the problem of moving all n disks to the right pole can be started
using following Algorithm.
Algorithm1. Declare necessary variables such as n, A, B, C etc. 2. Input number of disks 3. If n=1 move single disk from peg A to peg C and stop. Else move the top (n-1) disks from peg A to peg B using peg C as auxiliary. 4. Move remaining disks from peg A to peg C. 5. Move (n-1) disks from peg B to peg C using peg A as auxiliary
Source Code
#include<stdio.h>void transfer(int n, char from, char to, char temp);int main(){
int n;
printf("WELCOME TO THE TOWERS OF HONAI\n\n");printf("How many disks? ");scanf("%d", &n);printf("\n");transfer(n,'L','R','C');return 0;
}void transfer(int n, char from, char to, char temp){/** n = number of disks
from = orininto = destinationtemp = temporary storage **/if(n>0){
/** move n-1 disks from origin to temporary **/
transfer(n-1, from, temp, to);/** move nth disk from origin to destination **/
printf("Move disk %d from %c to %c\n", n, from, to);/** move n-1 disks from temporary to destination **/
transfer(n-1, temp, to, from);}}
Output
WELCOME TO THE TOWERS OF HONAI
How many disks? 3
Move disk 1 from L to R
Move disk 2 from L to C
Move disk 1 from R to C
Move disk 3 from L to R
Move disk 1 from C to L
Move disk 2 from C to R
Move disk 1 from L to R
0 comments:
Post a Comment