C语言实现汉诺塔算法

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

int a[10][3] = { 0 };

void show(int a[10][3]);//显示的作用
void hanno(int n, char A, char B, char C);//移动的过程,控制control
void move(char X, char Y);//移动,链接数据,视图


void show(int a[10][3]) 
{	 
	printf("%5c%5c%5c\n", 'A', 'B', 'C');
	printf("=======================\n");
	for (int i = 0; i < 10; ++i)
	{
		for (int j = 0; j < 3; ++j)
		{
			printf("%5d", a[i][j]);

		}
		printf("\n");

	}
}


void hanno(int n, char A, char B, char C)
{
	if (n<1)
	{
		return;

	}
	else if (n==1)
	{
		printf("\n%c->%c", A, C);//直接
		move(A, C);
		show(a);

	}
	else
	{
		//N
		hanno(n - 1, A, C, B);

		printf("\n%c->%c", A, C);//直接
		move(A, C);
		show(a);

		hanno(n - 1, B, A, C);
	}
	
	
}

void move(char X, char Y)
{
	int m = X - 65;	   //[9][m]
	int n = Y - 65;	   //[9][n]
	int imove = -1;
	for (int i = 0; i < 10; i++)
	{
		if (a[i][m]!=0)		//找到第一个不为0的数
		{
			imove = i;
			break;


		}

	}
	//a[imove][m]

	int jmove;
	if (a[9][n]==0)
	{
		jmove = 9;

	}
	else
	{
		jmove = 10;
		for (int i = 0; i < 10; i++)
		{
			if (a[i][n]!=0)
			{
				jmove = i;
				break;

			}

		}
		jmove -= 1;
	}
	 //交换数据
	int temp = a[imove][m];
	a[imove][m] = a[jmove][n];
	a[jmove][n] = temp;

	
}

void main()
{
	int n = 0;
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		a[10 - 1 - i][0] = n - i;//布局
	}
	show(a);
	hanno(n, 'A', 'B', 'C');

	



	system("pause");
}


IDE:Visual Studio2017
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值