برجهای هانوی در سی
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
//hanoi towers by mehrdad//
void Hanoi (int StartCol, int EndCol, int nDisks);
int ParseCmdLine(int argc, char *argv[],
int *StartCol, int *EndCol, int *nDisks);
int main(int argc, char *argv[]) {
int StartCol, EndCol, nDisks;
if ( !ParseCmdLine(argc, argv, &StartCol, &EndCol, &nDisks) )
exit(EXIT_FAILURE);
printf("Towers of Hanoi!\n");
printf("================\n\n");
printf("To move %d disks from column %d to column %d...\n\n",
nDisks, StartCol, EndCol);
Hanoi(StartCol, EndCol, nDisks);
exit(EXIT_SUCCESS);
}
void Hanoi(int StartCol, int EndCol, int nDisks) {
if ( nDisks ) {
Hanoi(StartCol, 6 - (StartCol + EndCol), nDisks - 1);
printf("Move disk from column %d to column %d\n", StartCol, EndCol);
Hanoi(6 - (StartCol + EndCol), EndCol, nDisks - 1);
}
}
int ParseCmdLine(int argc, char *argv[],
int *StartCol, int *EndCol, int *nDisks) {
int n = 1;
*nDisks = 4;
*StartCol = 1;
*EndCol = 2;
while ( n < argc ) {
if ( !strncmp(argv[n], "-d", 2) || !strncmp(argv[n], "-D", 2) ) {
*nDisks = strtol(&argv[n][2], NULL, 0);
if ( *nDisks < 1 ) {
printf("Must have at least 1 disk to move!\n");
return 0;
}
}
else if ( !strncmp(argv[n], "-s", 2) || !strncmp(argv[n], "-S", 2) ) {
*StartCol = strtol(&argv[n][2], NULL, 0);
if ( *StartCol < 1 || *StartCol > 3 ) {
printf("Start column must be 1, 2 or 3!\n");
return 0;
}
}
else if ( !strncmp(argv[n], "-e", 2) || !strncmp(argv[n], "-E", 2) ) {
*EndCol = strtol(&argv[n][2], NULL, 0);
if ( *EndCol < 1 || *EndCol > 3 ) {
printf("End column must be 1, 2 or 3!\n");
return 0;
}
if ( *EndCol == *StartCol ) {
printf("Start column and end column must be different!\n");
return 0;
}
}
++n;
}
return 1;
}