Guest User

Untitled

a guest
Jul 19th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.23 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. typedef struct stack
  6. {
  7. int tower[13];
  8. int top;
  9.  
  10. } tower;
  11.  
  12.  
  13. void InitStack(tower *towerptr, int MaxElements);
  14. void push ( tower *towerptr, int rod);
  15. int pop(tower *towerptr );
  16. void printower(tower *towerptr);
  17. int Top (tower *towerptr);
  18. void printalltowers(tower *towerptr[3],int N);
  19. void doHanoi(int total, int N, tower *towerptr[3],int from, int to, int aux);
  20. void populatestack(tower *towerptr,int N);
  21.  
  22.  
  23.  
  24.  
  25. int main ( int argc, char *argv[])
  26. {
  27. int i;
  28. tower *pyrgos[3];
  29.  
  30. for (i=0;i<3;i++)
  31. {
  32. InitStack(pyrgos[i],5);
  33. }
  34.  
  35. populatestack(pyrgos[0],5);
  36. printalltowers(pyrgos,5);
  37. doHanoi(5,5,pyrgos,0,2,1);
  38.  
  39.  
  40. }
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48. void populatestack(tower *towerptr,int N)
  49. {
  50.  
  51. int i;
  52. for (i=0;i<N;i++)
  53. {
  54.  
  55. push(towerptr,(N-i));
  56.  
  57. }
  58. }
  59.  
  60. void InitStack(tower *towerptr, int MaxElements)
  61. {
  62. int i;
  63. for (i=0;i<(MaxElements+1);i++)
  64. {
  65. towerptr->tower[i]=0;
  66.  
  67.  
  68. }
  69. towerptr->top=-1;
  70.  
  71.  
  72. }
  73.  
  74. void push (tower *towerptr, int rod)
  75. {
  76. towerptr->tower[((towerptr->top)+1)]=rod;
  77. (towerptr->top)++;
  78.  
  79.  
  80.  
  81. }
  82.  
  83.  
  84.  
  85.  
  86. int pop(tower *towerptr )
  87.  
  88. {
  89.  
  90. int i;
  91. i=towerptr->tower[towerptr->top];
  92. towerptr->tower[towerptr->top]=0;
  93. (towerptr->top)--;
  94. return i;
  95. }
  96.  
  97. int Top(tower *towerptr )
  98. {
  99.  
  100. return towerptr->tower[towerptr->top];
  101. }
  102.  
  103.  
  104. void printower(tower *towerptr)
  105. {
  106. int i,j;
  107.  
  108. int size=(towerptr->top+1);
  109.  
  110.  
  111. for (i=0;i<=size;i++)
  112. {
  113.  
  114. int kena=(5-towerptr->tower[(size-i)]);
  115. int payles=towerptr->tower[(size-i)];
  116. for (j=0;j<kena;j++)
  117. {
  118.  
  119. printf(" ");
  120.  
  121. }
  122. for (j=0;j<payles;j++)
  123. {
  124. printf("-");
  125.  
  126. }
  127. printf(".");
  128. for (j=0;j<payles;j++)
  129.  
  130. {
  131. printf("-");
  132.  
  133. }
  134. for (j=0;j<kena;j++)
  135. {
  136.  
  137. printf(" ");
  138.  
  139. }
  140. printf("\n");
  141.  
  142. }
  143.  
  144.  
  145.  
  146. }
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153. void printalltowers(tower *towerptr[3],int N)
  154. {
  155.  
  156. int i,j;
  157.  
  158. int size=N;
  159.  
  160.  
  161. for (i=0;i<=size;i++)
  162. {
  163.  
  164. int kena1=(N-towerptr[0]->tower[(size-i)]);
  165. int payles1=towerptr[0]->tower[(size-i)];
  166. int kena2=(N-towerptr[1]->tower[(size-i)]);
  167. int payles2=towerptr[1]->tower[(size-i)];
  168. int kena3=(N-towerptr[2]->tower[(size-i)]);
  169. int payles3=towerptr[2]->tower[(size-i)];
  170. for (j=0;j<kena1;j++)
  171. {
  172.  
  173. printf(" ");
  174.  
  175. }
  176. for (j=0;j<payles1;j++)
  177. {
  178. printf("-");
  179.  
  180. }
  181. printf(".");
  182. for (j=0;j<payles1;j++)
  183.  
  184. {
  185. printf("-");
  186.  
  187. }
  188. for (j=0;j<kena1;j++)
  189. {
  190.  
  191. printf(" ");
  192.  
  193. }
  194.  
  195.  
  196.  
  197. printf(" ");
  198.  
  199.  
  200.  
  201.  
  202. for (j=0;j<kena2;j++)
  203. {
  204.  
  205. printf(" ");
  206.  
  207. }
  208. for (j=0;j<payles2;j++)
  209. {
  210. printf("-");
  211.  
  212. }
  213. printf(".");
  214. for (j=0;j<payles2;j++)
  215.  
  216. {
  217. printf("-");
  218.  
  219. }
  220. for (j=0;j<kena2;j++)
  221. {
  222.  
  223. printf(" ");
  224.  
  225. }
  226.  
  227.  
  228. printf(" ");
  229.  
  230.  
  231.  
  232. for (j=0;j<kena3;j++)
  233. {
  234.  
  235. printf(" ");
  236.  
  237. }
  238. for (j=0;j<payles3;j++)
  239. {
  240. printf("-");
  241.  
  242. }
  243. printf(".");
  244. for (j=0;j<payles3;j++)
  245.  
  246. {
  247. printf("-");
  248.  
  249. }
  250. for (j=0;j<kena3;j++)
  251. {
  252.  
  253. printf(" ");
  254.  
  255. }
  256.  
  257. printf("\n");
  258.  
  259. }
  260.  
  261. printf("\n\n");
  262. }
  263.  
  264.  
  265. void doHanoi(int total, int N, tower *towerptr[3],int from, int to, int aux)
  266. {
  267.  
  268.  
  269.  
  270. if (N>0)
  271. {
  272.  
  273.  
  274. doHanoi(total, N-1, towerptr, from, aux, to);
  275.  
  276. push(towerptr[to],pop(towerptr[from]));
  277. printalltowers(towerptr,total);
  278. printf ("move %d --> %d\n", from, to);
  279.  
  280. doHanoi(total, N-1,towerptr, aux, to, from);
  281. }
  282.  
  283.  
  284. }
Add Comment
Please, Sign In to add comment