利用启发式搜索算法求解3阶汉诺塔问题

汉诺塔问题是计算机科学领域研究的一个经典问题,最简单的是3阶汉诺塔,复杂度可以扩展到4阶、5阶,乃至N阶。。。

很多数据结构教材都提到了汉诺塔问题,并给出了递归解法。最近我用启发式搜索算法解决了最简单的3阶汉诺塔问题,如果改进一下该算法求解4阶汉诺塔应该也是可以的。这里简单谈一谈思路。

Step-1: 存储结构设计

塔体结构:

struct Hanoi_Stack
{

  String disc;
  Hanoi_Stack *front;
  Hanoi_Stack *next;
  int position;

};

//*******************************

移动记录结构

struct Hanoi_List
{
  String draw[3][3];

  Hanoi_List *front;
  Hanoi_List *next;

};

//*************************************



Step-2:制定启发式搜索策略

首先满足目标优先原则,其次满足就近原则

if(目标==Z)

//如果towerid=0,则Z,Y,X
//如果towerid=1,则Z,X,Y
//如果towerid=2,则Y,X,Z

if(目标==Y)

//如果towerid=0,则Y,Z,X
//如果towerid=1,则Z,X,Y
 //如果towerid=2,则Y,X,Z


Step-3:算法结构设计

《利用启发式搜索算法求解3阶汉诺塔问题》



Step-4:算法测试


初始化

《利用启发式搜索算法求解3阶汉诺塔问题》

计算结果:

《利用启发式搜索算法求解3阶汉诺塔问题》

    原文作者: 汉诺塔问题
    原文地址: https://blog.csdn.net/u013061929/article/details/17202295
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞