汉诺塔问题

汉诺塔问题

 

个人信息:就读于燕大本科软件工程专业 目前大三;

本人博客:google搜索“cqs_2012”即可;

个人爱好:酷爱数据结构和算法,希望将来搞科研为人民作出自己的贡献;

博客内容:汉诺塔问题;

博客时间:2014-4-7

编程语言:C++ (面向过程)

编程坏境:Windows 7 专业版

编程工具:vs2008 32位编译器

 

  • 引言

有些问题已经老掉牙,但是那不是对自己。

  • 题目

汉诺塔问题。

  • 思路

递归解决问题

1. 递归解决 从A 到 B 移动 n-1 个元素

2. 把最大的底层从 A 移动到 C

3.递归解决 从 B 到  C 移动 n-1 个元素

  • 实验

时间效率真慢,不过能解决问题,

一开始 A 从上到下 一次 1 2 3 4 5 6 7 8 9 10

移动完之后 C 从上到下 是 1 2 3 4 5 6 7 8 9 10 

  • 代码

test.cpp

#include<iostream>
#include<stack>
using namespace std;


// function: make n elems from A to C with B
// input: three stacks,and elem number
// output: void
// 功能: 借助B移动n个元素从A到C
void _One_to_anohter(stack<int> * A,stack<int> *B,stack<int>*C,int n);


int main()
{
	stack<int> * A = new stack<int>;
	stack<int> * B = new stack<int>;
	stack<int> * C = new stack<int>;
	int n = 10 ;
	for( int i = n;i>0;i-- )
	{
		A->push( i );
	}
	_One_to_anohter(A,B,C,n);	
	cout<<"C"<<endl;
	while(! C->empty())
	{
		cout<<C->top()<<endl;
		C->pop();
	}

	system("pause");
	return 0;
}


// function: make n elems from A to C with B
// input: three stacks,and elem number
// output: void
// 功能: 借助B移动n个元素从A到C
void _One_to_anohter(stack<int> * A,stack<int> *B,stack<int>*C,int n)
{
	if(A != NULL && B != NULL && C != NULL && n>0 && n <= A->size())
	{
		if(n == 1)
		{
			int data = A->top();
			C->push(data);
			A->pop();
		}
		else
		{
			_One_to_anohter(A,C,B,n-1);
			int data = A->top();
			C->push(data);
			A->pop();
			_One_to_anohter(B,A,C,n-1);
		}
		
	}
	else
	{
		cout<<"exception of function _One_to_anohter input"<<endl;
	}
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值