java汉诺塔递归问题
就是把end赋值给temp,temp赋值给end啊,如果写出来这段代码还是不容易的,不是进入mb_hanoi(2,'S','E','T',)这个方法中继续执行是进入上面的方法,mb_hanoi(2,'S','E','T',)是调用方法,方法在上面
我们提供的服务有:成都网站设计、成都网站制作、微信公众号开发、网站优化、网站认证、兴安ssl等。为上1000家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的兴安网站制作公司
你顺着看就行了
java实现汉诺塔的代码,求注释,具体到每一行代码,急求,,,
这样应该可以了 如果还有那个地方不懂的,建议你研究下汉诺塔算法
import java.io.BufferedReader;//引入IO包中的BufferedReader
import java.io.IOException;//引入IO包中的IO异常处理
import java.io.InputStreamReader;//引入IO包中的InputStreaReader
public class Hinoi { //主类
static int m=0;//定义移动的次数
//主程序入口——main方法
public static void main(String[] args) {
//创建BufferedReader对象,InputStream输入流
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入盘子的个数:");
try {
int sl = Integer.parseInt(bf.readLine().toString());//接收总盘子个数
toMove(sl,"A","B","C");//调用移动方法 A——C
} catch (NumberFormatException e) {捕获NumberFormatException异常
// TODO Auto-generated catch block
e.printStackTrace();//打印异常
} catch (IOException e) {//捕获IOException异常
// TODO Auto-generated catch block
e.printStackTrace();//打印异常
}
System.out.println("总共移动了:"+m+" 次数");//打印移动次数
}
//移动方法
private static void toMove(int sl, String one, String two,String three)
{
if(sl==1){//如果只有一个盘子,则直接移动到C柱
System.out.println("盘子"+sl+" 从 "+one+"----"+three);
}else{//如果总盘数大于1,则递归调用移动方法
//把所有的数量为sl-1的盘子全部从A移到到B(C作为一个过渡),好提供一个最下面的位置给最大盘子到C;
toMove(sl-1,one,three,two);
System.out.println("盘子"+sl+" 从 "+one+"----"+three);
//把所有的剩余的盘子从B移动到C(A作为一个过渡)
toMove(sl-1,two,one,three);
}
m++;
}
}
java汉诺塔(河内塔)问题。解释一下汉诺塔为3时怎么想
你把1,2盘看成一个特殊的盘。所以现在n=2,当n=2时,需先把1盘移动到B塔中,把1-3步一起看,作用即把特殊盘移动至B。
然后把3盘移动至C塔,即第4步。
最后,把特殊盘移动到C塔上,同样把5-7步一起看,达到的效果即把特殊盘移动至C盘,完成!!
等于4的时候 ,其实就是把123盘看成特殊盘!同样的道理,因为汉诺塔是递归实现的,明白之后很简单。
求一个汉诺塔的JAVA代码
public class Hannoi {
public static void main(String[] args) {
int nDisks = 3;
moveDish(nDisks, 'A', 'B', 'C');
}
private static void moveDish(int level, char from, char inter, char to) {
if (level == 1) {
System.out.println("从" + from + "移动盘子 " + level + " 号到" + to);
} else {
moveDish(level - 1, from, to, inter);
System.out.println("从" + from + "移动盘子 " + level + " 号到" + to);
moveDish(level - 1, inter, from, to);
}
}
}
java中汉诺塔的算法问题
class
HanRuoTa
{
static
long
s=0;
public
static
void
main(String
args[])
{
int
n
=3;
System.out.println("汉诺塔层数为"
+
n);
System.out.println("移动方案为:"
);
hanoi(n,
'a',
'b',
'c');
System.out.println("需要移动次数:"+s);
}
static
void
hanoi(int
n,
char
a,
char
b,
char
c)
{
if
(n
0)
{
hanoi(n
-
1,
a,
c,
b);
move(a,
b);
hanoi(n
-
1,
c,
b,
a);
s++;
}
}
static
void
move(char
x,
char
y)
{
System.out.println(x
+
"-"
+
y
+
"\t");
}
}
运行结果:
汉诺塔层数为3
移动方案为:
a-b
a-c
b-c
a-b
c-a
c-b
a-b
需要移动次数:7
JAVA汉诺塔
import java.awt.*;
public class TowerPoint //公共类TowerPoint
{
int x,y; //定义2个int类型的变量
boolean 有盘子; //定义一个boolean类型的变量
Disk 盘子=null; //初始化一个对象"盘子"并赋值为空
HannoiTower con=null; //初始化一个HannoiTower类的对象"con"并赋值为空
public TowerPoint(int x,int y,boolean boo) //构造函数,有3个参数,x,y,boo
{
this.x=x; //将参数赋给当前x
this.y=y; //将参数赋给当前y
有盘子=boo; //将boo赋给"有盘子"
}
public boolean 是否有盘子() //定义一个返回boolean类型的方法"是否有盘子"
{
return 有盘子; //返回boolean类型的"有盘子"
}
public void set有盘子(boolean boo) //set方法,并且参数为boolean
{
有盘子=boo; //将boo赋给有盘子
}
public int getX() //取得x方法
{
return x; //返回x
}
public int getY()//取得y方法
{
return y; //返回y
}
public void 放置盘子(Disk 盘子,HannoiTower con) //定义一个有2个参数的"放置盘子"方法。参数是Disk类和HannoiTower类
{
this.con=con; //当前con等于参数con
con.setLayout(null); //调用on对象的方法setLayout,并设置为空
this.盘子=盘子; //当前盘子等于参数盘子
con.add(盘子); //con对象的add方法,加入"盘子"对象
int w=盘子.getBounds().width; //定义并给一个int类型的w变量一个值,值为"盘子.getBounds().width"
int h=盘子.getBounds().height; //定义并给一个int类型的h变量一个值,值为"盘子.getBounds().height"
盘子.setBounds(x-w/2,y-h/2,w,h);//调用"盘子"对象的setBounds方法,并把传递值
有盘子=true;//boolean类型的对象"有盘子"等于true
con.validate(); //调用con对象的validate方法
}
public Disk 获取盘子() //定义"获取盘子"方法,方法返回Disk对象
{
return 盘子; //返回盘子
}
}
-----------------------另外说一下,楼主太抠门了!!!!!!!!只给5分-----------------------
文章标题:java汉诺塔代码理解,编写汉诺塔程序
地址分享:http://cqwzjz.cn/article/hsgged.html