Guest User

Untitled

a guest
Jan 17th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.39 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 moveTwoDisk(string, string, string, string, string, string, int, int&, int&);
  11. int moveOneDisk(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 << endl;
  35. cout << "Start" << endl << endl;
  36.  
  37. //timing
  38. start = clock();
  39. moveOneDisk(Start, Dest, A, B, C, D, numOfDisks, *m, *r);
  40. finish = clock();
  41.  
  42. cout << endl << endl;
  43. cout << "Total time taken to finsih: " << ((double)(finish-start)/CLOCKS_PER_SEC)*1000 << " milliseconds." << endl;
  44. cout << "Total moves made: " << movesMade << endl;
  45. cout << "Total number of recursive calls: " << recursive << endl << endl;
  46.  
  47. movesMade = 0;
  48. recursive = 0;
  49.  
  50. cout << "Number of disks: ";
  51. cin >> numOfDisks;
  52. }
  53.  
  54. cout << endl;
  55. system("PAUSE");
  56. return 0;
  57. }
  58. int moveOneDisk(string Start, string Dest, string A, string B, string C, string D, int numOfDisks, int &ptr, int &ptr2)
  59. {
  60. if (numOfDisks == 1)
  61. {
  62. printMove(numOfDisks, Start, A);
  63. ptr++;
  64. printMove(numOfDisks, A, B);
  65. ptr++;
  66. printMove(numOfDisks, B, C);
  67. ptr++;
  68. printMove(numOfDisks, C, D);
  69. ptr++;
  70. printMove(numOfDisks, D, Dest);
  71. ptr++;
  72. printMove(numOfDisks, Dest, Start);
  73. return ptr;
  74. }
  75. else if (numOfDisks > 1)
  76. {
  77. moveTwoDisk(Start, A, B, C, D, Dest, numOfDisks-1, ptr, ptr2);
  78. printMove(numOfDisks, Start, Dest);
  79. ptr++;
  80. moveOneDisk(Dest, Start, A, B, C, D, numOfDisks-1, ptr, ptr2);
  81. ptr2++;
  82. moveOneDisk(Start, A, B, C, D, Dest, numOfDisks-1, ptr, ptr2);
  83. ptr2++;
  84. }
  85. return 0;
  86. };
  87. int moveTwoDisk(string Start, string Dest, string A, string B, string C, string D, int numOfDisks, int &ptr, int &ptr2)
  88. {
  89. if (numOfDisks == 1)
  90. {
  91. printMove(numOfDisks, Start, A);
  92. ptr++;
  93. printMove(numOfDisks, A, B);
  94. ptr++;
  95. printMove(numOfDisks, B, C);
  96. ptr++;
  97. printMove(numOfDisks, C, D);
  98. ptr++;
  99. printMove(numOfDisks, D, Dest);
  100. ptr++;
  101. printMove(numOfDisks, Dest, Start);
  102.  
  103. return ptr;
  104. }
  105. else if (numOfDisks > 1)
  106. {
  107. moveTwoDisk(Start, A, B, C, D, Dest, numOfDisks-1, ptr, ptr2); // recursive call with numOfDisks-1 disks
  108. ptr2++;
  109. printMove(numOfDisks, Start, A);
  110. ptr++;
  111. printMove(numOfDisks, A, B);
  112. ptr++;
  113. printMove(numOfDisks, B, C);
  114. ptr++;
  115. printMove(numOfDisks, C, D);
  116. ptr++;
  117. moveOneDisk(Dest, Start, A, B, C, D, numOfDisks-1, ptr, ptr2);
  118. printMove(numOfDisks, D, Dest);
  119. ptr++;
  120. moveTwoDisk(Start, A, B, C, D, Dest, numOfDisks-1, ptr, ptr2);
  121. ptr2++;
  122. }
  123.  
  124. return 0;
  125.  
  126. };
  127. void printMove(int numOfDisks, string from, string to)
  128. {
  129. cout << endl << "Move disk (" << numOfDisks << ") from (" << from << ") to (" << to << ")\t";
  130.  
  131. };
Add Comment
Please, Sign In to add comment