对于Hanoi塔问题,一般最经典的解决方法就是递归,这在C或者Pascal语言中都比较容易实现;LV目前还未支持递归调用(经过尝试……真的不行……连互递归都被识破了,晕);所以对于Hanoi这样的问题,可以用LV提供的Queue(即队列)这样的控件来解决。Queue原先被用来做有关同步或者实时等设计而成,但是它有着更强大的应用前景,作为Stack来解决Hanoi只是抛砖而已,希望大家能挖掘出更多更好的应用;总之,LV其实有时候会让人产生很惊艳的感觉。
有几点需要说明一下:
1. Queue的元素我设计为一个Cluster,其中包括Towers(整数数组,其中包含的是盘的信息),1st、2nd、3rd三个字符串(表示起始点,中间站点,目的点);
2. 由于Queue不能直接当作Stack来用,在实际用的时候需要用 Enqueue Element At Opposite End .vi ,这样就是将新元素直接insert入最前端,这样在Dequeue的时候就能得到的是最近进Stack的元素,从而很方便地实现了Stack的Pop和Push的功能。
3. 根据经典的算法,过程中的顺序应该为:
因为使用了Stack的话,顺序应该有所变动,即先hanoi(n-1,y,x,z),再将编号n的盘子移动,再hanoi(n-1,x,z,y);具体的看程序应该能体会出来,比较难讲清楚。
整个程序做得还是比较粗糙的,而且编程习惯也不是短时间能养好的,呵呵,见笑了! :)
版本: LabVIEW 8.2
文章评论(0条评论)
登录后参与讨论