QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 822|回复: 7

研究一下算法

[复制链接]
发表于 2005-1-30 14:11:32 | 显示全部楼层 |阅读模式
有谁用shell写个汉诺塔的算法来呀?
递归非递归都可以,我只用C写过,Shell不会
发表于 2005-1-30 18:16:53 | 显示全部楼层
弱弱的问,啥是什么什么塔?  
回复

使用道具 举报

 楼主| 发表于 2005-1-30 19:55:17 | 显示全部楼层
~(!*)@&#)(&!)($)!*$^*!&^*()&!(^$*(&!%^@#!@#

计算机专业应该会知道的
回复

使用道具 举报

发表于 2005-1-30 19:57:55 | 显示全部楼层
[quote:54dd72d4b1="fke7985"]~(!*)@&#)(&!)($)!*$^*!&^*()&!(^$*(&!%^@#!@#

计算机专业应该会知道的[/quote]
偶不是这个专业滴  
回复

使用道具 举报

发表于 2005-1-30 22:59:11 | 显示全部楼层
[code:1]
move() {
  echo "Move disc $2 from $1 to $3"
}

hanoi() {
  if [ "$1" == "1" ]
    then
      move $2 1 $4
    else
      hanoi $[ $1-1 ] $2 $4 $3
        move $2 $1 $4
        hanoi $[ $1-1 ] $3 $2 $4
    fi
}

hanoi $1 "x" "y" "z"
exit 0
[/code:1]
把这段代码保存为一个脚本(比如就叫hanoi),然后运行sh hanoi x就可以了(x用一个数字代替,表示圆盘的个数)
另外,代码没有加任何的合法性判断,只做算法演示之用
回复

使用道具 举报

 楼主| 发表于 2005-1-31 10:34:27 | 显示全部楼层
能不能用非递归的试试?
回复

使用道具 举报

发表于 2005-1-31 22:56:31 | 显示全部楼层
非递归就要长点了,个人认为,hanoi问题写非递归没任何意义
[code:1]
declare -a arrN
declare -a arrX
declare -a arrY
declare -a arrZ
move() {
  echo "Move disc $2 from $1 to $3"
}
push() {
  arrN[`expr $1+1`]=`expr $5 - 1`
  arrX[`expr $1+1`]="$2"
  arrY[`expr $1+1`]="$3"
  arrZ[`expr $1+1`]="$4"
}
hanoi() {
  top=0
  while [ "$top" -ge "0" ]
  do
    while [ "${arrN[$top]}" -gt "1" ]
    do
      push $top "${arrX[$top]}" "${arrZ[$top]}" "${arrY[$top]}" "${arrN[$top]}"
      let "top += 1"
    done
    if [ "${arrN[$top]}" -eq "1" ]
    then
      move "${arrX[$top]}" 1 "${arrZ[$top]}"
      let "top -= 1"
    fi
    if [ "$top" -ge "0" ]
    then
      move "${arrX[$top]}" ${arrN[$top]} "${arrZ[$top]}"
      push `expr $top - 1` "${arrY[$top]}" "${arrX[$top]}" "${arrZ[$top]}" ${arrN[$top]}
    fi
  done
}
arrX[0]="X"
arrY[0]="Y"
arrZ[0]="Z"
arrN[0]=$1
hanoi
unset arrX
unset arrY
unset arrZ
unset arrN
exit 0
[/code:1]
用法和上面递归的一样
回复

使用道具 举报

发表于 2005-2-1 19:58:53 | 显示全部楼层
非递归就要长点了,个人认为,hanoi问题写非递归没任何意义
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 11:47 , Processed in 0.040618 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表