?? 5-10.c
字號:
#include <stdio.h>
#include <graphics.h>
#define n 5 //定義盤的個數
#define r 30 //定義盤的半徑
struct position
{
int x;
int y;
int radius;
}p[4][9];
main()
{
int i, j, k, A=9, B=2, x=1, y=2, z=3;
for(i=1;i<=8;i++)
{
p[1][i].x=105;
p[2][i].x=245;
p[3][i].x=385;
}
for(i=1;i<=n;i++)
{
p[1][i].y=435+i*(i-1)*5-i*65;
p[1][i].radius=30-(i-1)*5;
p[2][i].y=p[3][i].y=0;
p[2][i].radius=p[3][i].radius=0;
}
initgraph(&A, &B, "");
for(i=1; i<=3; i++)
for(j=1; j<=n; j++)
{
setcolor(3);
circle(p[i][j].x,p[i][j].y,pi)[j].radius);
}
k=0;
for(i=1; i<=6; i+=2)
{
setcolor(15);
k++;
line(i*70, 400, (i+1)*70, 400);
line(105+140*(k-1), 200, 105+140*(k-1), 400);
}
k=n;
hanoic(n, x, y, z);
getchar()
getchar();
}
hanoic(l, x, y, z)
int x, y, z; /*調用move(),遞歸地移動圓盤*/
{
if(l==1)
move(x, z);
else
{
hanoic(l-1, x, z, y); /*以z為中間手段將l-1個盤從x移到y*/
move(x, z);
hanoic(l-1, y, x, z);
}
}
move(a, b)
int a, b;
{
int c, d, i, j, k, original;
int color=8;
printf("%d--->%d\t", a, b);
for(i=1; i<=8; i++)
……
p[b][d].y=p[b][d-1].y-p[b][d-1].radius-p[a][c].radius;
p[b][d].radius=p[a][c].radius;
setbkcolor(color);
while(p[a][c].y!=165&&p[a][c].y!=166)
{
setcolor(color);
circle(p[a][c].x, p[a][c].y, p[a][c].radius);
p[a][c].y-=2;
setcolor(3);
circle(p[a][c].x, p[a][c].y, p[a][c].radius);
setcolor(15);
k=0;
for(i=1; i<=6; i+=2)
{
k++;
line(105+140*(k-1), 200, 105+140*(k-1), 400);
}
}
original=p[a][c].x;
while(p[a][c].x!= p[b][d].x)
{
setcolor(color);
circle(p[a][c].x, p[a][c].y, p[a][c].radius);
if(a>b)
p[a][c].y-=2;
else
p[a][c].x+=2;
setcolor(3);
circle(p[a][c].x, p[a][c].y, p[a][c].radius);
}
while(p[a][c].y!= p[b][d].y)
{
setcolor(color);
circle(p[a][c].x, p[a][c].y, p[a][c].radius);
p[a][c].y+=2;
setcolor(3);
circle(p[a][c].x, p[a][c].y, p[a][c].radius);
k=0;
setcolor(15);
for(i=1; i<=6; i+=2)
{
k++;
line(105+140*(k-1), 200, 105+140*(k-1), 400);
}
}
p[a][c].x=original;
p[a][c].y=0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -