⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 5-10.c

📁 一本经典书籍--C程序员成长攻略的原代码
💻 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 + -