表示有四个盘子的hanoi塔游戏盘子的移动过程图怎样画

安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&c#汉诺塔的递归算法与解析,需要的朋友可以参考一下 从左到右 A B C 柱 大盘子在下, 小盘子在上, 借助B柱将所有盘子从A柱移动到C柱, 期间只有一个原则: 大盘子只能在小盘子的下面. 如果有3个盘子, 大中小号, 越小的越在上面, 从上面给盘子按顺序编号 1(小),2(中),3(大), 后面的原理解析引用这里的编号. 小时候玩过这个游戏, 基本上玩到第7个,第8个就很没有耐心玩了,并且操作的动作都几乎相同觉得无聊. 后来学习编程, 认识到递归, 用递归解决汉诺塔的算法也是我除了简单的排序
引言 汉诺塔算法一向是算法设计科目标最具代表性的研究题目,本文存眷于如何设计多柱汉诺塔最优算法的商量.最简单的汉诺塔是三个柱子(A.B.C),是以多柱汉诺塔的柱子个数M≥3.下面从三柱汉诺塔说起,慢慢深切我们要关怀的题目. 1. 三柱汉诺塔 三柱汉诺塔是经典的汉诺塔题目,在算法设计中是递归算法的典范题目.其算法是如许的: 起首把A 柱上方的n- 1 个碟子经由过程C 柱移到B 柱上[T(n-1)步],然后把A 柱剩下的一个碟子移到C 柱上[1步], 最后把B 柱上所有的碟子经由过程A 柱移到C
这篇文章主要介绍了java数据结构和算法中的汉诺塔示例,需要的朋友可以参考下 package com.tiantian. /** * _|_1 | | * __|__2 | | * ___|___3 | | (1).把A上的4个木块移动到C上. * ____|____4 | | * A B C * * | | | * | _|_1 | * | __|__2 | 要完成(1)的效果,必须要把1.2.3木块移动到B,这样才能把4移动到C * ____|____4 ___|___
这篇文章主要介绍了C++实现汉诺塔算法经典实例,代码简洁高效,对于学习算法的朋友有一定的借鉴价值,需要的朋友可以参考下 本文所述为汉诺塔算法的C++代码的经典实现方法. 汉诺塔问题描述:3个柱为a.b.c,圆盘最初在a柱,借助b柱移到c柱.需要你指定圆盘数. 具体实现代码如下: #include &iostream& int times = 0; //全局变量,搬动次数 //第n个圆盘从x柱搬到z柱 void move(int n, char x, c
c语言 汉诺塔算法代码,需要的朋友可以参考一下 #include&stdio.h& void move(char a,char b) { printf(&%c-&%c\n&,a,b); } void han(int n,char a,char b,char c) { if(n&0) { han(n-1,a,c,b); move(a,b); han(n-1,c,b,a); } } int main() { scanf(&%d&,&
汉诺塔(Hanoi) 算法Java实现.通过三个函数,分别对Hanoi进行递归.非递归和非递归规律实现. 程序如下: View Code /* * Hanoi塔游戏 问题描述: * 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具. * 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照 * 大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小 * 顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在 * 三根柱子之间一次只能移动一个圆盘.
汉诺塔问题的描述如下:有3根柱子A.B和C,在A上从上往下按照从小到大的顺序放着一些圆盘,以B为中介,把盘子全部移动到C上.移动过程中,要求任意盘子的下面要么没有盘子,要么只能有比它大的盘子.编程实现3阶汉诺塔的求解步骤 思路如下: 要实现3阶汉诺塔的求解步骤,也就是说初始状态时,A上从上到下有三个盘子,分别为1号盘.2号盘和3号盘,其中1号盘最小,3号盘最大: 判断剩余盘子个数,如果只有一个盘子就退出迭代,如果有大于一个盘子就继续迭代. 代码如下: public class HanoiTowe
之前的文章,我们给大家分享了不少汉诺塔算法的实现语言,包括C.c++.java.python等,今天我们就来使用go语言来实现一下,需要的小伙伴来参考下吧. hano.go package main import ( &bufio& &fmt& &os& &strconv& ) func main() { fmt.Print(&输入要移动的盘子数:&) reader := bufio.NewReader(o
汉诺塔本是C语言开门就学的东西,简单的汉诺塔问题解法代码 以前学东西不扎实,现在捡捡也好,汉诺塔本是C语言开门就学的东西,不过上课那会儿真心听不懂,直到大二了,才明白那是咋回事,我感觉的编程,真的是一张窗户纸,不过捅破要花时间理解吸收. 题目描述:有一个塔,塔内有A,B,C三个柱子.起初,A柱上有n个盘子,依次由大到小.从下往上堆放,要求将它们全部移到C柱上:在移动过程中可以利用B柱,但每次只能移到一个盘子,且必须使三个柱子上始终保持大盘在下,小盘在上的状态.要求编程输出移动的步骤. 代码如下:
在这里我们将构造一个基于HT for Web的HTML5+JavaScript来实现汉诺塔游戏. 汉诺塔的游戏规则及递归算法分析请参考http://en.wikipedia.org/wiki/Tower_of_Hanoi. 知道了汉诺塔的规则和算法,现在就开始创建元素.用HT for Web()现有的3D模板创建底盘和3根柱子不是问题,问题是要创建若干个中空的圆盘.一开始的想法是:创建一个圆柱体,将圆柱体的上下两端隐藏,设置柱面的宽度来实现圆盘的效果
本文给大家分享的是一则使用vc++实现模拟汉诺塔效果的代码,代码实现起来很简单,主要是汉诺塔算法的思路要正确,正在练习汉诺塔的小伙伴也可以来看看,希望大家能够喜欢. 先上效果图 再附上源代码: 汉诺塔: #include &stdio.h& #include &math.h& int arrA[15], arrB[15], arrC[15]; // 分别为A.B.C int lenA, lenB, lenC; char plate[32];
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具. 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. times = 0 def test(num,a,b,c): globaltimes ifnum==1: print (a,b) times+=1 el
个人觉得汉诺塔这个递归算法比电子老鼠的难了一些,不过一旦理解了也还是可以的,其实网上也有很多代码,可以直接参考.记得大一开始时就做过汉诺塔的习题,但是那时代码写得很长很长,也是不理解递归的结果.今天重新来实现一下 操作就是:A B 号码A的塔顶一层放在号码B的塔顶.如1(空格) 3 回车. 话说有人能把我这C的代码添加到QT界面框架上去么? 代码写的不好 ,维护性不够,只能玩8层的,写完以后发现很难拓展,软件工程,设计模式有待提高.... 里面提示输入等级的装B用了,没有实现,大家随便输入个个位
汉诺塔是比较经典的递归调用的例子,原理就不多做说明,这里使用的是一个在线python工具,感觉还不错,在http://www.codeskulptor.org上. def hannuota(n, a, b, c): if n == 1: print &%s --& %s& %(a, b) if n & 1: hannuota(n - 1, a, c, b) hannuota(1, a, b, c) hannuota(n - 1, c, b, a) if __name__ =
这篇文章主要介绍了JavaScript汉诺塔问题解决方法,涉及javascript递归调用操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了JavaScript汉诺塔问题解决方法.分享给大家供大家参考.具体实现方法如下: &script language=&javascript&& var han=function (disc,src,aux,dst){ if(disc&0){ han(disc-1,src,dst,aux); document
这篇文章主要介绍了使用python实现递归版汉诺塔示例(汉诺塔递归算法),需要的朋友可以参考下 利用python实现的汉诺塔.带有图形演示 from time import sleep def disp_sym(num, sym): print(sym*num, end='') #recusion def hanoi(a, b, c, n, tray_num): if n == 1: move_tray(a, c) disp(tray_num) sleep(0.7) else: hanoi(a,
这篇文章主要介绍了c#实现汉诺塔问题示例,需要的朋友可以参考下 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.下面是c#实现汉诺塔示例 using S using System.Collections.G using System.L using System.T namespace 汉诺塔 { class Program { static void hanoi(char A, char B, char C, int count) {
(1)当1个时,直接A-&C (2)当2时,将2-&B A-&C 2-&C (3)当3时,将前2个打包成2',现在只要处理(2)的情况 (4)当4时,将前3个打包成3',现在只要处理(3)的情况 (N)当N时,将前N-1个打包(N-1)',即只要处理(N-1)的情况 move(n, a, b, c) ;;;a,b,c的位置是相对的,这里是将A-&C { if (n == 1) 将A-&C else move(n-1, a, c, b) 装n-1移动到B(参见(2)的情况
PHP中pecl::memcache扩展的三种安装方法 先提前说明一下还有一种是pecl::memcached,memcached会依赖于libmemcached,这种是比较新的 关于比较请看/p/memcached/wiki/PHPClientComparison.推荐使用新的memcached,安装方法基本同下面,只是需要先安装libmemcached,如果还需要启用压缩,还需要安装zlib. 用 PECL 编译共享 PECL 扩展库 $ pecl
换而言之,就是把1-9排成三行三列,横竖斜三个数相加都等于15 因这类大家在编辑器中容易出错特,打包下载 http://xiazai.jb51.net/200906/yuanma/jiugongge_bat.rar
有朋友给我发过来&前华为高管胡勇先生谈:华为为什么不上市&,居然和我的文章是同一天(3月31日)发的. 仔细看了该文,该文将&华为的股权结构&.&商业模式&.&融资方式&作为了华为不上市的三个理由,但三个理由都过于牵强. 1. 华为的股权结构--控制力问题 不容置疑,华为正逐渐步入&后任正非时代&,因为&任总的股份可能很低,如果上市,就可能失去控制权,华为还离不开任总&,就不上市理由并不成立,华
iis+django 三种方案都运行不了
1.穷举法 穷举法是最基本的算法设计策略,其思想是列举出问题所有的可能解,逐一进行判别,找出满足条件的解. 穷举法的运用关键在于解决两个问题: 如何列举所有的可能解: 如何判别可能解是否满足条件: 在运用穷举法时,容易出现的问题是可能解过多,导致算法效率很低,这就需要对列举可能解的方法进行优化. 以题1041--纯素数问题为例,从都可以看作是可能解,可以通过对所有这些可能解逐一进行判别,找出其中的纯素数,但只要稍作分析,就会发现其实可以大幅度地降低可能解的范围.根据题意易知,个
一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是&分而治之&,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题--直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并.这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)-- 任何一个可以用计算机求解的问题所需的计算时间都与其规模有关.问题的规模越小,越容易直接求解,解题所需的计算时间也越少.例如,对于n个元素的排序问题,当n=1时
上一篇文章,我介绍了Reddit的排名算法. 它的特点是,用户可以投赞成票,也可以投反对票.也就是说,除了时间因素以外,只要考虑两个变量就够了. 但是,还有一些特定用途的网站,必须考虑更多的因素.世界排名第一的程序员问答社区Stack Overflow,就是这样一个网站. 你在上面提出各种关于编程的问题,等待别人回答.访问者可以对你的问题进行投票(赞成票或反对票),表示这个问题是不是有价值. 一旦有人回答了你的问题,其他人也可以对这个回答投票(赞成票或反对票).根据投票结果,系统自动找出最佳回答
引言 笔试啊,笔试,面试啊,面试,找工作啊,找工作.此文十月百度,阿里巴巴,迅雷搜狗最新面试十一题已经整理了最新的面试题70道,本文依次整理腾讯,网易游戏,百度等各大公司最新校园招聘的笔试题,后续将继续整理十月下旬的笔/面试题. 腾讯校园招聘会笔试题 1.下面的排序算法中,初始数据集的排列顺序对算法的性能无影响的是(B) A.插入排序B.堆排序 C.冒泡排序 D.快速排序 2.以下关于Cache的叙述中,正确的是(B) A.CPU中的Cache容量应大于CPU之外的Cache
2003年才成立的汉理资本在中国私募股权投资财务顾问领域也算得上是老兵了.成功的案子不少,但汉理资本投资策略极其简单,即聚焦三大领域,且在这些领域中,遵循不求行业第一,只看最好.最有潜力的企业. 而善于反思的汉理资本董事长钱学锋也从他最成功的投资案子里,吸取了最大的教训. &三新企业& 钱学锋1980年代就读北京外交学院,之后赴美留学.等这个上海人重回故土时,已是二十年后. 在上海成立汉理资本之前,钱学锋的职业是风险投资人. 他曾在软银中国任副总裁,在风投行业的第一个案例则是代表软银中
我经常在 TopLanguage 讨论组上推荐一些书籍,也经常问里面的牛人们搜罗一些有关的资料,人工智能.机器学习.自然语言处理.知识发现(特别地,数据挖掘).信息检索 这些无疑是 CS 领域最好玩的分支了(也是互相紧密联系的),这里将最近有关机器学习和人工智能相关的一些学习资源归一个类: 首先是两个非常棒的 Wikipedia 条目,我也算是 wikipedia 的重度用户了,学习一门东西的时候常常发现是始于 wikipedia 中间经过若干次 google ,然后止于某一本或几本著作. 第一
学习程序语言是每个程序员的必经之路.可是这个世界上有太多的程序语言,每一种都号称具有最新的&特性&.所以程序员的苦恼就在于总是需要学习各种稀奇古怪的语言,而且必须紧跟&潮流&,否则就怕被时代所淘汰. 作为一个程序语言的研究者,我深深的知道这种心理产生的根源.程序语言里面其实有着非常简单,永恒不变的原理.看到了它们,就可以在很短的时间之内就能学会并且开始使用任何新的语言,而不是花费很多功夫去学习一个又一个的语言. 对程序语言的各种误解 学习程序语言的人,经常会出现以下
本篇文章介绍了,在Java中递归算法的使用分析.需要的朋友参考下 递归算法是一种直接或者间接地调用自身的算法.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解. 问题1:一列数的规则如下: 1.1.2.3.5.8.13.21.34 ,求第30位数是多少?使用递归实现 public class FibonacciSequence { public static void main(String[] args){ System.out.println(Fr
今天上午又去招聘了,加上前面一段时间的招聘经验,有些话不吐不快. 我们希望找到能干活的人,就是能编程序的人,但是我感觉现在刚毕业的人里面,包括名校的,能干活的人比例非常的低,大概不超过百分之一. 很多人都说,没有参加过实际的项目,没有经验,希望能够在工作过程中学习等等,开始的时候我也这样认为,随着面试的人的增多,手下新人的增多,我的看法逐渐变了. 不谈个人主观能动性方面的种种问题,我想谈谈我心目当中的科班出身编程序选手的及格线. 如果你希望编程序为生的话,那么,大学才是你最重要的经验积累地点,相
学习程序语言是每个程序员的必经之路.可是这个世界上有太多的程序语言,每一种都号称具有最新的&特性&.所以程序员的苦恼就在于总是需要学习各种稀奇古怪的语言,而且必须紧跟&潮流&,否则就怕被时代所淘汰. 作为一个程序语言的研究者,我深深的知道这种心理产生的根源.程序语言里面其实有着非常简单,永恒不变的原理.看到了它们,就可以在很短的时间之内就能学会并且开始使用任何新的语言,而不是花费很多功夫去学习一个又一个的语言. 对程序语言的各种误解 学习程序语言的人,经常会出现以下
组合的话原理上比排列简单,我想大一拿C嘎嘎写汉诺塔程序是很常见的,这个原理类似,也是直接交换元素 public class A_private { public static void zuhe(char[] all, int times) { if (all.length == times) { System.out.println(new String(all)); } else { for (int i = i & all. i++) { if (times !
Strange Towers of Hanoi Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 2513 Accepted: 1667 Description Background Charlie Darkbrown sits in another one of those boring Computer Science lessons: At the moment the teacher just explains the
冒泡排序,非常经典的排序方法. 原理:将序列划分为无序和有序区,不断通过交换较大元素至无序区尾完成排序. 要点:设计交换判断条件,提前结束以排好序的序列循环. 实现: &!-- lang: cpp --& Void BubbleSort(Node L[]) { int i ,j;//设计跳出条件 for(j=n;j&0;j--) { ischanged = for(i=0;i&j;i++) { if(L[i]&L[i+1])//如果
有关于Prolog Prolog是一门逻辑编程语言,它于1972年由Alain Colmerauer和Phillipe Roussel开发完成,在 自然语言处理领域颇受欢迎.在Prolog中,数据以逻辑规则的形式存在,下面是基本 构建单元. 事实.事实是关于真实世界的基本断言.(Babe是一头猪,猪喜欢泥巴.) 规则.规则是关于真实世界中一些事实的推论.(如果一个动物是猪,那么它喜欢泥巴.) 查询.查询是关于真实世界的一个问题.(Babe喜欢泥巴吗?) 事实和规则被放入一个知识库(knowled
异步消除递归的思想源于论坛上一篇由博士microcai写的&&异步遍历文件夹&&而来. 考虑一个问题: void hannoi_sync(int n, char A, char B, char C) { if (n == 1) { printf(&Move disk %d from %c to %c\n&, n, A, C); } else { hannoi_sync (n-1, A, C, B); printf(&Move di
这篇文章主要介绍了C#中尾递归的使用.优化及编译器优化,本文讲解了递归运用.尾递归优化.编译器优化等内容,需要的朋友可以参考下 递归运用 一个函数直接或间接的调用自身,这个函数即可叫做递归函数. 递归主要功能是把问题转换成较小规模的子问题,以子问题的解去逐渐逼近最终结果. 递归最重要的是边界条件,这个边界是整个递归的终止条件. static int RecFact(int x) { if (x == 0) return 1; return x * RecFact(x - 1); } RecFac
李嘉诚--长江实业集团有限公司董事局主席兼总经理 1958年,30岁的李嘉诚在香港的资产已经突破了千万元,而成为千万富翁的李嘉诚依旧是每天工作16小时,晚上还坚持自学-住的是老房子.穿的是旧式西装.戴的是廉价电子手表,没有任何奢侈恶习.同样在这一年,他留意到自己厂房的租金年年上涨,而香港地少人多.寸土寸金,房地产大有投资的空间,也因此开始了从&塑料花大王&向&房地产巨子&的转变.几十年的勤俭与精明投资,终于成就了他的&超人&传奇.他当年的名言在今
图像处理,如果单独一张的话,那就太好搞了,就像大白天下楼梯一样,总是可以预知有哪些东西会被处理和可以处理: 但若是一大堆图像再加上实时性能上的要求,不好好想想你就准备看刚问世的动画片吧! 用机器学习的话,就像是递归的解汉诺塔,构建的时候很麻烦,最后却是最省力的, 拖延啊,这件事到现在了,终于不得不解决了,觉得很像好事,但毕竟不是,已经浪费了那么多的时间, 把事情往前推,有时候就像梦里推箱子一样,什么都挨不着! 还有那个boost,push front!
// 工程名:Hanoi // 文件名:Hanoi.cpp // 功能:汉诺塔递归求解 // 依赖文件:无 #include &iostream.h& #include &string.h& int count=0; void Hanoi(int n,char A,char B,char C) { if(n==1) { count++; cout&&&第&&&count&&&步:&; cout&&lt
HOJ 部分分类 1001 这个就不用说了吧 1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 1005 找规律(循环点) 1006 感觉有点BT的题,我到现在还没过 1007 经典问题,最近点对问题,用分治 1008 简单题 1009 贪心 1010 搜索题,剪枝很关键
简单题 1013 简单题(有个小陷阱) 1014 简单题 1015 可以看作搜索题吧 1016 经典的搜索 1017 简单数学题 1018 简单数学题 1019 简单数学题 1
HDOJ题目分类 模拟题, 枚举 13 20 31 35 39 48 57 64 75 84 07 19 44 61 77
一笔画问题转换为奇偶校验问题 将路线图转换为&图&的形式 1.起点和终点相同的情况,图中顶点都是偶数 2.起点和终点不相同的情况,图中所有定点都是偶数,或者有2个奇数 汉诺塔问题(递归) H(n)=H(n-1)+1+H(n-1)=2^n - 1 斐波那契数列 F(n)=F(n-1)+F(n-2) 帕斯卡三角形(杨辉三角) 谢尔平斯基三角形 指数爆炸 一张厚度为1mm的纸对折39次超过地月距离(39w公里) 二分查找即指数爆炸的方式
最近看的一本书,把数学知识相当复习了一遍,更重要是阐释了数学所要传达的一种思维: 以下是阅读时候的一些记录: 不要将2的0次方的值作为一种知识去记忆,我们跟需要考虑的是,如何对2的0次方进行适当的定义,以期让规则变得更简单, 这不是记忆力的问题,而是想象力的问题,请记住这种思维方式,以简化规则为目标去定义值 在按位计数法中,数为具有很重要的意义,0的作用就是占位 通过0来明示&没有&,能够使规则简单化.在许多情况下,规则越简单越好 将大问题拆分为小单元 逻辑是消除歧义的工具 if语言的
递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己. 一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合. 使用递归要注意的有两点: 1)递归就是在过程或函数里面调用自身; 2)在使用递归时,必须有一个明确的递归结束条件,称为递归出口. 递归分为两个阶段: 1)递推:把复杂的问题的求解推到比原问题简单一些的问题的求解; 2)回归:当获得最简单
本文讨论: 扩展 ASP.NET 应用程序和数据库 优化代码 高效的缓存 相似性和负载平衡 本文使用了以下技术: ASP.NET 目录 性能等式 扩展问题 优化代码 负载平衡 相似性 最大程度减小负载 缓存 扩展数据库 无止境的扩展工作 作 为 ASP.NET 性能顾问,我们接触的项目通常都是已经出现问题的项目.在许多情况下,求助电话都是在应用程序已经投产后才打来的.在开发人员那里一切都正常的程序到了用户那里却无法正常运行.他们抱怨:站点太慢了.管理部门想知道为什么在测试的时候没有发现这一问题.
摘要: 本文从切分的需求.作用.难点等方面谈起,介绍分析了目前主流的各种切分方法以及其优缺点,并介绍了一个新型的无监督切分方法,并在此基础上对切分在工程需求上进行了相应的分析和讨论,在最后在此算法基础上给出一个融合各种优点的切分框架. 关键词: 中文分词, Query Segmentation,无监督 技术领域: 自然语言处理 我们为什么要切分? 说到切分(segmentation),大多数人最容易想到的就是中文分词.作为没有天然空格区分的语言,切词可以帮助计算机去索引文章,从而便于信息检索等方
最近开发了繁体版本的网站,在网上找了一段比较流行的繁简切换的JS实现了,不过后来却发现,有些页面会卡死,针对这个问题,下面有个不错的解决方法 公司打算进入台湾市场,最近开发了繁体版本的网站,数据库里的信息全是简体,除了网页上固定的文字手动翻译了,文章内容标题都不是繁体. 于是在网上找了一段比较流行的繁简切换的JS实现了,不过后来却发现,有些页面会卡死,根本无法执行下去.弹出信息表明都是这个繁简切换的JS带来的问题. 仔细查看了下,发现原来是这个问题.分享下,也许有不少人遇到类似的问题. 先上代码
这篇文章主要介绍了floyd算法实现思路及实例代码,有需要的朋友可以参考一下 正如我们所知道的,Floyd算法用于求最短路径.Floyd算法可以说是Warshall算法的扩展,三个for循环就可以解决问题,所以它的时间复杂度为O(n^3). Floyd算法的基本思想如下:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B.所以,我们假设Dis(AB)为节点A到节点B的最短路径的距离,对于每一个节点X,我们检查Dis(AX) + Dis(XB) & D
Copyright (C) , All Rights Reserved.
版权所有 闽ICP备号
processed in 0.064 (s). 9 q(s)下面的程序通过修改WindowBox类的num和gap修改盘子个数和时间间隔可以正确运行,但是为什么在菜单的设置选项里,设置之后,画布就不再变化了,而是一直保持原来运行的结果呢?令外,运行完以后,最大
问题描述下面的程序通过修改WindowBox类的num和gap修改盘子个数和时间间隔可以正确运行,但是为什么在菜单的设置选项里,设置之后,画布就不再变化了,而是一直保持原来运行的结果呢?令外,运行完以后,最大化最小化,窗口,盘子的大小为什么会变化呢?急啊代码如下:importjavax.swing.*;importjava.awt.*;importjavax.swing.border.*;importjava.awt.event.*;publicclasshanoi{/***@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubWindowBoxwb=newWindowBox();}}//获取移动结果classHanoiResult{intarray[][];//移动步数intstate[][];//每次移动各个柱子的盘子//移动步数//盘子个数HanoiResult(){array=newint[200][3];state=newint[2000][3];}//获取移动的结果voidgetResult(){init_array();hanoi(num,1,2,3);/*for(inti=0;i&=i++){for(intj=0;j&3;j++)System.out.print(array[i][j]);System.out.println();}*//*for(inti=0;i&num*(count+1);i++){for(intj=0;j&3;j++)System.out.print(state[i][j]);System.out.println();if((i+1)%num==0)System.out.println("*******");}*//*for(inti=0;i&i++)System.out.println(state[i][0]+""+state[i][1]+""+state[i][2]);*/}//初始化数组voidinit_array(){array[0][0]=array[1][0]=for(inti=0;i&1000;i++)for(intj=0;j&3;j++)state[i][j]=0;for(inti=0;i&i++)state[i][0]=i+1;for(inti=i&2*i++)state[i][0]=i-num+1;}//获取n号柱子上的最大盘子intgetbiggest(intm,intn){inti,for(i=0;i&num&&state[m+i][n]!=0;i++);flag=state[m+i-1][n];state[m+i-1][n]=0;};//将j号盘子放到第n号柱子上voidins(intm,intn,intj){for(i=0;i&num&&state[m+i][n]!=0;i++);state[m+i][n]=j;};voidmov(inta,intb){array[count+1][--a]--;array[count+1][--b]++;for(inti=0;i&3;i++)array[count+2][i]=array[count+1][i];ins((count+1)*num,b,getbiggest((count+1)*num,a));for(inti=0;i&i++)for(intj=0;j&3;j++)state[(count+2)*num+i][j]=state[(count+1)*num+i][j];count++;}voidhanoi(intn,inta,intb,intc){if(n==1)mov(a,c);else{hanoi(n-1,a,c,b);mov(a,c);hanoi(n-1,b,a,c);}}voidsetnum(intnum){this.num=}}//窗口类classWindowBoxextendsFrameimplementsActionListener{HanoiR//hanoi对象//计时//时间间隔Boxhb,mycanvasca1,ca2,ca3;//画布对戏那个MenuBMenumenu1,menu2;MenuItemitem1,item3,item4;LNumDialogdialog1;WindowBox(){num=3;gap=500;t=0;ca1=newmycanvas();ca2=newmycanvas();ca3=newmycanvas();ca1.setBackground(Color.orange);ca2.setBackground(Color.cyan);ca3.setBackground(Color.green);dialog1=newNumDialog(this,"设定运行参数",true);menubar=newMenuBar();menu1=newMenu("文件");menu2=newMenu("选项");item1=newMenuItem("设定参数…");item3=newMenuItem("退出");item4=newMenuItem("关于");menu1.add(item1);menu1.add(item3);menu2.add(item4);menubar.add(menu1);menubar.add(menu2);setMenuBar(menubar);setTitle("汉诺塔问题演示");setBackground(Color.pink);hr=newHanoiResult();bottom=newLabel("已运行时间0已移动步数0(时间间隔尚未设定)");hb=Box.createHorizontalBox();vb=Box.createVerticalBox();hb.add(Box.createHorizontalStrut(8));hb.add(ca1);hb.add(Box.createHorizontalStrut(4));hb.add(ca2);hb.add(Box.createHorizontalStrut(4));hb.add(ca3);hb.add(Box.createHorizontalStrut(8));vb.add(hb);vb.add(bottom);setLayout(newFlowLayout());add(vb);addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);}});setBounds(200,20,624,620);setVisible(true);item1.addActionListener(this);item3.addActionListener(this);item4.addActionListener(this);run();}//运行函数publicvoidrun(){hr.setnum(num);ca1.setnum(num);ca2.setnum(num);ca3.setnum(num);hr.getResult();try{item1.setEnabled(false);}catch(Exceptione){};for(inti=0;i&=hr.i++){redraw(ca1,ca2,ca3,hr.array[i][0],hr.array[i][1],hr.array[i][2],i);}item1.setEnabled(true);}//菜单监听@OverridepublicvoidactionPerformed(ActionEvente){//TODOAuto-generatedmethodstubif(e.getSource()==item1){dialog1.setVisible(true);hr=newHanoiResult();t=0;this.num=dialog1.getnum();this.gap=(int)(dialog1.gettime()*1000);//System.out.println("num"+num);//System.out.println("time"+gap);run();}elseif(e.getSource()==item3)System.exit(0);elseif(e.getSource()==item4){hr=newHanoiResult();t=0;this.num=4;this.gap=500;run();}}//重画函数publicvoidredraw(mycanvasca1,mycanvasca2,mycanvasca3,inta,intb,intc,intcs){bottom.setText("已运行时间"+t+"秒已移动步数"+(cs)+"(时间间隔为0.5s)");for(i=0;i&i++){ca1.state[i]=hr.state[cs*num+i][0];}//重画画布1ca1.draw(a);for(i=0;i&i++){ca2.state[i]=hr.state[cs*num+i][1];}//重画画布2ca2.draw(b);for(i=0;i&i++){ca3.state[i]=hr.state[cs*num+i][2];}//重画画布3ca3.draw(c);t=t+gap/1000.0;//延时gaptry{Thread.sleep(gap);}catch(InterruptedExceptione){}}}classmycanvasextendsCanvas{intnum,x,y,intstate[];voidsetnum(intnum){this.num=}voiddraw(intnum){this.num=this.repaint();}mycanvas(){state=newint[10];setBounds(10,10,200,550);}//每多一个x+8,y-60,width-16;底层(30,490,140,50,20,20)publicvoidpaint(Graphicsg){for(inti=0;i&i++)state[i]--;inty=490;for(inti=0;i&i++){g.drawRoundRect(30+8*state[i],y,140-16*state[i],50,20,20);y-=60;}}}//对话框类classNumDialogextendsDialogimplementsActionListener{Stringnum_Stringtime_Buttonconfirm,TextFieldnum_TextFieldtime_Labeltip1,tip2,num_label,time_Boxhr1,hr2,hr3,NumDialog(Framef,Strings,booleanb){super(f,s,b);hr1=Box.createHorizontalBox();hr2=Box.createHorizontalBox();hr3=Box.createHorizontalBox();tip1=newLabel("必须输入1-8的整数");tip2=newLabel("为获得最好视觉效果时间最好不要超过1s");num_label=newLabel("盘子个数");time_label=newLabel("时间间隔");hv=Box.createVerticalBox();num_input=newTextField();time_input=newTextField();confirm=newButton("运行");cancel=newButton("取消");confirm.addActionListener(this);cancel.addActionListener(this);setLayout(newFlowLayout());hr1.add(num_label);hr1.add(Box.createHorizontalStrut(5));hr1.add(num_input);hr2.add(time_label);hr2.add(Box.createHorizontalStrut(5));hr2.add(time_input);hr3.add(confirm);hr3.add(Box.createHorizontalStrut(10));hr3.add(cancel);hv.add(tip1);hv.add(tip2);hv.add(Box.createVerticalStrut(20));hv.add(hr1);hv.add(Box.createVerticalStrut(10));hv.add(hr2);hv.add(Box.createVerticalStrut(15));hv.add(hr3);add(hv);setBounds(400,100,400,300);addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){setVisible(false);}});}publicintgetnum(){}publicdoublegettime(){}@OverridepublicvoidactionPerformed(ActionEvente){//TODOAuto-generatedmethodstubif(e.getSource()==confirm){num_str=num_input.getText();time_str=time_input.getText();try{num=Integer.valueOf(num_str);time=Float.valueOf(time_str);}catch(NumberFormatExceptionexce){tip1.setText("输入有误:必须输入1-8的整数!");}setVisible(false);}elseif(e.getSource()==cancel){setVisible(false);}}}解决方案解决方案二:学会用调试来解决问题吧,学会自己分析和把问题表达清楚吧,总贴一大段代码上来,头都痛了。解决方案三:不是啊,我分析了好久,没弄出个所以然来,所以只有求助大虾了,另外这个程序只有这一个类,只要建一个hanoi类就可运行了,hanoi.java的代码就在上面,希望大家帮帮我……
【云栖快讯】集合阿里巴巴、阿里云技术干货!历届云栖社区在线峰会技术荟萃专题出炉,赶紧收藏吧~&&
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
6款热门基础云产品6个月免费体验;2款产品1年体验;1款产品2年体验
开发者常用软件,超百款实用软件一站式提供

我要回帖

更多关于 hanoi塔递归算法c语言 的文章

 

随机推荐