Guest User

Untitled

a guest
Jan 17th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.33 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <string>
  4. #include <stdio.h>
  5. #include <time.h>
  6. #include <fstream>
  7.  
  8. using namespace std;
  9.  
  10. int hanoi2(string, string, string, string, string, string, int, int&, int&);
  11. int hanoi1(string, string, string, string, string, string, int, int&, int&);
  12. void printMove(int, string, string);
  13.  
  14. int main()
  15. {
  16. string Start = "Strt"; // Start
  17. string Dest = "Dest"; // Destination
  18. string A = "Aux1"; // Auxiliary 1
  19. string B = "Aux2"; // Auxiliary 2
  20. string C = "Aux3"; // Auxiliary 3
  21. string D = "Aux4"; // Auxiliary 4
  22. int numOfDisks;
  23. int movesMade = 0;
  24. int recursive = 0;
  25. int* m = &movesMade;
  26. int* r = &recursive;
  27.  
  28. clock_t start, finish;
  29. cout << "Enter the number of Disks: ";
  30. cin >> numOfDisks;
  31.  
  32. while (numOfDisks > 0)
  33. {
  34. cout << "Start" << endl;
  35.  
  36. //timing
  37. start = clock();
  38. hanoi1(Start, Dest, A, B, C, D, numOfDisks, *m, *r);
  39. finish = clock();
  40.  
  41. cout << endl << endl;
  42. cout << "Total time taken to finsih: " << ((double)(finish-start)/CLOCKS_PER_SEC)*1000 << " milliseconds." << endl << endl;
  43. cout << "Total moves made: " << movesMade << endl << endl;
  44. cout << "Total number of recursive calls: " << recursive << endl << endl;
  45.  
  46. movesMade = 0;
  47. recursive = 0;
  48.  
  49. cout << "Number of disks: ";
  50. cin >> numOfDisks;
  51. }
  52.  
  53. cout << endl;
  54. system("PAUSE");
  55. return 0;
  56. }
  57. /*
  58. * hanoi1 moves 1 disk
  59. */
  60. int hanoi1(string Start, string Dest, string A, string B, string C, string D, int numOfDisks, int &ptr, int &ptr2)
  61. {
  62. if (numOfDisks == 1)
  63. {
  64. printMove(numOfDisks, Start, Dest); // Move disk n from A to B
  65. ptr++; // update move counter
  66. return ptr;
  67. }
  68. else if (numOfDisks > 1)
  69. {
  70. hanoi2(Start, Dest, A, B, C, D, numOfDisks-1, ptr, ptr2);
  71. printMove(numOfDisks, Start, Dest);
  72. ptr++;
  73. hanoi1(D, Start, Dest, A, B, C, numOfDisks-1, ptr, ptr2);
  74. ptr2++;
  75. hanoi1(Start, Dest, A, B, C, D, numOfDisks-1, ptr, ptr2);
  76. ptr2++;
  77.  
  78. }
  79. return 0;
  80. };
  81. /*
  82. * hanoi2 to move two disks, one after another
  83. */
  84. int hanoi2(string Start, string Dest, string A, string B, string C, string D, int numOfDisks, int &ptr, int &ptr2)
  85. {
  86. if (numOfDisks == 1)
  87. {
  88. printMove(numOfDisks, Start, Dest); // Move disk n from A to B
  89. ptr++; // update move counter
  90. printMove(numOfDisks, Dest, A);
  91. ptr++;
  92. printMove(numOfDisks, A, B);
  93. ptr++;
  94. printMove(numOfDisks, B, C);
  95. ptr++;
  96. printMove(numOfDisks, C, D);
  97. ptr++;
  98. }
  99. else if (numOfDisks > 1)
  100. {
  101. hanoi2(Start, Dest, A, B, C, D, numOfDisks-1, ptr, ptr2); // recursive call with numOfDisks-1 disks
  102. ptr2++;
  103. printMove(numOfDisks, Start, Dest);
  104. ptr++;
  105. printMove(numOfDisks, Dest, A);
  106. ptr++;
  107. printMove(numOfDisks, A, B);
  108. ptr++;
  109. printMove(numOfDisks, B, C);
  110. ptr++;
  111. hanoi1(D, Start, Dest, A, B, C, numOfDisks-1, ptr, ptr2);
  112. printMove(numOfDisks, C, D);
  113. ptr++;
  114. hanoi2(Start, Dest, A, B, C, D, numOfDisks-1, ptr, ptr2);
  115. ptr2++;
  116. }
  117. return 0;
  118.  
  119. };
  120. /*
  121. * move function to print the output for each move
  122. */
  123. void printMove(int numOfDisks, string from, string to)
  124. {
  125. cout << "Move disk <" << numOfDisks << "> from (" << from << ") to (" << to << ")\t";
  126.  
  127. };
Add Comment
Please, Sign In to add comment