Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.24 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<graphics.h>
  3. #include<dos.h>
  4. #include<math.h>
  5.  
  6. int tower[3][10];// the three towers' disks as stack
  7. int top[3];//top of the three stacks
  8. int from,to;//moving 'from' tower number 'to' tower number
  9. int diskInAir;//number of disk moved (1 to n)
  10. int l,b,u;
  11.  
  12. void push(int to, int diskno)
  13. //putting disk on tower
  14. {
  15. tower[to-1][++top[to-1]]=diskno;
  16. }
  17.  
  18. int pop(int from)
  19. //take topmost disk from tower
  20. {
  21. return(tower[from-1][top[from-1]--]);
  22. }
  23.  
  24. void drawStill()
  25. {
  26. int j,i,disk;
  27. cleardevice();
  28. for(j=1;j<=3;j++)
  29. {
  30. //draw tower
  31. setfillstyle(CLOSE_DOT_FILL,WHITE);
  32. bar(j*l,u,j*l+5,b);
  33. //draw all disks on tower
  34. for(i=0;i<=top[j-1];i++)
  35. {
  36. disk=tower[j-1][i];
  37. setfillstyle(SOLID_FILL,1+disk);
  38. bar(j*l-15-disk*5,b-(i+1)*10,j*l+5+15+disk*5,b-i*10);
  39. }
  40. }
  41. }
  42.  
  43. void animator()
  44. //to show the movement of disk
  45. {
  46. int x,y,dif,sign;
  47. diskInAir=pop(from);
  48. x=from*l;
  49. y=b-(top[from-1]+1)*10;
  50. //taking disk upward from the tower
  51. for(;y>u-20;y-=15)
  52. {
  53. drawStill();
  54. setfillstyle(SOLID_FILL,1+diskInAir);
  55. bar(x-15-diskInAir*5,y-10,x+5+15+diskInAir*5,y);
  56. delay(10);
  57. }
  58. y=u-20;
  59. dif=to*l-x;
  60. sign=dif/abs(dif);
  61. //moving disk towards a target tower
  62. for(;abs(x-to*l)>25;x+=sign*15)
  63. {
  64. drawStill();
  65. setfillstyle(SOLID_FILL,1+diskInAir);
  66. bar(x-15-diskInAir*5,y-10,x+5+15+diskInAir*5,y);
  67. delay(10);
  68. }
  69. x=to*l;
  70. //placing disk on a target tower
  71. for(;y<b-(top[to-1]+1)*10;y+=15)
  72. {
  73. drawStill();
  74. setfillstyle(SOLID_FILL,1+diskInAir);
  75. bar(x-15-diskInAir*5,y-10,x+5+15+diskInAir*5,y);
  76. delay(10);
  77. }
  78. push(to,diskInAir);
  79. drawStill();
  80. }
  81.  
  82. void moveTopN(int n, int a, int b, int c)
  83. //Move top n disk from tower 'a' to tower 'c'
  84. //tower 'b' used for swapping
  85. {
  86. if(n>=1)
  87. {
  88. moveTopN(n-1,a,c,b);
  89. drawStill();
  90. delay(1000);
  91. from=a;
  92. to=c;
  93. //animating the move
  94. animator();
  95. moveTopN(n-1,b,a,c);
  96. }
  97. }
  98.  
  99. int main()
  100. {
  101. int i,gd=DETECT,gm,n;
  102. printf("Enter number of disks");
  103. scanf("%d",&n);
  104. initgraph(&gd,&gm,"C:\\TURBOC3\\BGI\\");
  105. //setting all tower empty
  106. for(i=0;i<3;i++)
  107. {
  108. top[i]=-1;
  109. }
  110. //putting all disks on tower 'a'
  111. for(i=n;i>0;i--)
  112. {
  113. push(1,i);
  114. }
  115. l=getmaxx()/4;
  116. b=getmaxy()-50;
  117. u=getmaxy()/3+100;
  118. //start solving
  119. moveTopN(n,1,2,3);
  120. delay(4000);
  121. getch();
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement