校园导游程序实验报告(汇总9篇)

时间:2025-06-21 07:17:01 admin 今日美文

校园导游程序实验报告 第1篇

     随着高校的发展,校园面积不断扩大,校园内跨区域活动频繁,为了给校内师生和校外人士办公、教学、生活等方面带来更大的便利,以及面对校园信息化建设的全面推广和迅猛发展,本系统将主要通过弗洛伊德算法,求出不同景点之间所需最短路径,方便访客出行,提供导游咨询,进一步加强数字化校园建设。      该系统实现功能如下:      1、多用户类型,能够提供游客和管理员两种用户模式,游客可以直接临时登录;管理员可以通过账号密码登录。可以自由添加管理员账号,并将其存储在文件中。      2、从河南工业大学的平面地图中选取出10个的景点来建立无向图。      3、为来访客人提供图中任意景点相关信息的查询。      4、为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。      5、修改、更新有关景点和道路的信息

     校园导游咨询系统的使用角色分为两种,一种为游客,仅拥有信息统计查询权限;另一种是管理员,拥有系统所有的权限,包括查询,修改等功能。系统中角色及其各自功能如表1所示:

用户类型      (1)游客:可在校园导游咨询系统上实现对校园信息的查询,查询景点信息和查看校园平面图,查询任意两景点之间的最短路径。      (2)管理员:在实现游客所有功能的前提下,具有更高级的权限,能够一输出所有景点信息,修改,更新各个景点信息,修改,更新各条道路信息。 查看校园详细信息      直接输出河南工业大学基本信息,供游客阅读。 查看该校园平面图      直接输出河南工业大学平面图,方便游客更好的了解学校各景点地理位置。 校园景点信息查询      通过输入的景点序号,查询该景点并输出基本信息,对其进行介绍。 景点最短路径查询      通过输入两个顶点的序号,最其最短路径进行查询,给出景点之间最短距离和详细的出行方式。 输出所有景点信息      管理员专属功能,一键输出所有景点信息,方便浏览管理。 修改景点基本信息      管理员专属功能,输入景点序号,查找该景点并对其景点基本信息进行修改。 修改路径基本信息      管理员专属功能,输入两个景点的序号来确定一条路径,然后对其路径的值进行修改。

     根据校园导游咨询系统的相关功能,我们可以得到该系统的简易用例图,用例图较为详细的描述了系统的一些基本功能以及操作流程。校园导游咨询系统用例图如图1所示:

校园导游程序实验报告 第2篇

(1)设计思想      该模块需要实现系统的管理员登陆功能。首先定义好账号、密码类型,定义标志变量flag。然后进行系统的登陆,首先输入账号,然后输入密码。定义文件指针打开文件,对输入的账号密码和文件中存储的账号信息进行匹配,如果匹配成功,进入系统;如果匹配失败,提示错误并要求重新输入,每次登录有三次机会,三次输入错误则本次登录失败并退出。 (2)涉及的数据结构      本函数涉及到账号密码信息。 (3)流程图      Login函数流程图如图4所示:

(4)关键代码

(1)设计思想      该模块需要实现系统的账号注册功能。首先定义好账号、密码类型,定义标志变量flag。再进行系统的注册,输入账号,定义文件指针打开文件,对输入的账号文件中存储的账号信息进行匹配,如果匹配成功说明该账号已被注册,提示注册失败并退出;如果匹配失败,说明该账号可以被注册,则继续输入密码,然后再次输入确认密码。如果两次密码输入不一致,提示错误并要求重新注册,如果两次密码一致,将账号密码信息存入文件并提示注册成功。 (2)涉及的数据结构      本函数涉及到账号密码信息。 (3)流程图      Registered_Account函数流程图如图5所示:

(1)设计思想      该模块需要实现系统的查询功能,输入待查寻询的景点编号,由于景点信息数量并不是很多,这里采用顺序查找,查找成功之后输出景点代号,信息及简介;若输入景点信息错误,查找失败输出提示该代号不存在。 (2)涉及的数据结构      本函数涉及到顶点信息和图的邻接矩阵。 (3)流程图      Query函数流程图如图6所示:

(1)设计思想      该模块需要实现系统的修改功能。此功能为管理员专属功能,首先输出当前所有景点信息,定义标志变量。输入要修改的景点代号,顺序查找。查找成功将该景点信息清除,重新输入信息并保存,修改成功输出提示;若查找失败提示输入错误。 (2)涉及的数据结构      本函数涉及到顶点信息和图的邻接矩阵。 (3)流程图      Modify_vertex函数流程图如图7所示:

(1)设计思想      该模块需要实现系统的修改功能输出平面图,此功能为管理员专属功能,输入起点和目的地的景点代号,来确定路径。然后对该路径进行查找,如果该路径存在,则对其进行修改;若路径不存在查找失败,提示输入错误。 (2)涉及的数据结构      本函数涉及到顶点信息和图的邻接矩阵。 (3)流程图      Modify_Edge函数流程图如图8所示:

(1)设计思想      该模块需要实现系统的最短路径查询功能,该功能是系统的核心。      Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Floyd(佛洛依德)算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。虽然我们可以直接对每个顶点通过迪杰斯特拉算法求得所有的顶点到所有顶点的时间复杂度,时间复杂度为O(n*3),但是弗洛伊德算法更加简洁优雅。      首先输出平面图,然后输入起点和目的地,然后进行判断,输入错误输出提示;输入成功,前面已经通过基本信息建图,通过Floyd求最短路径,从后往前追溯走过的结点,并且用一个数组记录下它的位置,然后再遍历数组输出所经过的每个点的信息。 (2)涉及的数据结构      本函数涉及到顶点信息和图的邻接矩阵。 (3)流程图      Ask函数流程图如图9所示:

校园导游程序实验报告 第3篇

     校园导游咨询系统主要通过佛洛依德算法求最短路径来为用户提供更为便利的出行方式,同时提供信息查询等相关操作。该系统运行实现结果如下所示。管理员账号密码信息如表3所示,河南工业大学平面抽象图如图10所示:

     系统运行主界面,提供了管理员登录、游客临时登录、和退出该系统三个选项、用户可以选择管理员登录进入管理员模式,也可以游客临时免密登录。程序运行结果如图11所示:

     选择管理员登录进入管理员登录界面,可以选择账号密码直接登录进入校园导游咨询系统,也可以增添管理账号密码,然后再进行登录。管理员登录界面如图12所示:

     输入1选择账号密码直接登录,输入最多有3次机会,如果输入账号密码都错误将提示输入错误并退出登录,输入时对密码进行加密,用“*”代替输入。程序运行结果如图13所示:

     输入2增添管理账号密码,输入账号,在文件中对该账号进行比较,如果账号已被注册,提示注册失败并退出注册,并要求重新输入正确的账号。程序运行结果如图14所示:

     输入2增添管理账号密码,输入账号,若未被注册继续输入密码,输入一次密码后要求再次输入密码进行确认,若注册成功并将账号密码信息存入文件。程序运行结果如图15所示:

     注册完成后可使用该账号进行登录,输入账号密码,登录成功后进入校园导游咨询系统的管理员操作界面,管理员可以使用系统所有功能。程序运行结果如图16,17所示:

     进入管理员操作界面后,输入1查看校园详细信息,输出河南工业大学的基本信息,输入2查看该校园平面图,输出河南工业大学平面图。程序运行结果如图18,19所示:

     输入3对校园景点信息进行查询,输入景点代号对其进行查询并输出景点代号,景点名称,景点简介等基本信息,输入4则一键输出所有景点信息。程序运行结果如图20,21所示:

     输入5查询景点之间最短路径,首先输出校园平面图,然后输入两个景点代号,通过佛洛依德算法求最短路径,输出最短路径长度和路线。程序运行结果如图22所示:

     输入6修改景点基本信息,首先输出所有景点信息,然后通过输入景点代号对其进行查询,找到该景点之后可对景点信息进行修改,操作完成提示修改成功。程序运行结果如图23所示:

     输入7修改路径基本信息,通过输入两个景点代号来确定路径,对该路径进行检索,找到该路径之后对其值进行修改,此时最短路径发生改变。程序运行结果如图24,25所示:

     在校园导游咨询系统主菜单中输入2游客临时登录,程序运行结果如图26所示。游客操作界面与管理员操作界面一致,只是部分功能受限导致无法使用,这里不做赘述。

校园导游程序实验报告 第4篇

ADT Guide{ 数据对象:V是具有相同特性的数据元素的集合,称为顶点集 数据关系:      R={VR}      VR={|v,w∈v且p(v,w)表示从v到w的弧,谓词p(v,w)定义了弧的意义或信息} 基本操作: CreateUDG(&G) 初始条件:V是图的顶点集,VR是图中弧的集合。 操作结果:按V和VR的定义构造图。 Query(G) 初始条件:图G存在,V是G中某个顶点 操作结果:查找图中顶点的信息并将其输出。 Modify_vertex(&G) 初始条件:V是图的顶点集,图G存在,V是G中某个顶点 操作结果:查找图中顶点,并对其信息进行修改。 Modify_Edge(&G) 初始条件:V是图的顶点集,VR是图中弧的集合,图G存在 操作结果:通过顶点确定边,对边值进行修改。 Floyd (G) 初始条件:VR是图中弧的集合,图G存在 操作结果:佛洛依德算法求最短路径。 Ask(G) 初始条件:图G存在,V是G中某个顶点 操作结果:输出最短路径。 Path_Out(G, start, end) 初始条件:图G存在,V是G中某个顶点 操作结果:输出最短路径经过的顶点。 }ADT Guide

     本系统中采用结构体定义管理员账号密码信息、景点信息,结构体定义邻接矩阵存储图的有关信息。 管理员的存储定义

景点信息的存储定义

系统相关函数定义

     int Login_System();      int __Login();      int Registered_Account();      int Login();      void CreateUDG(AMGragh &G);      int _s();      int User();      void _s_Menu();      void User_Menu();      void Introduce();      void Map();      void Query(AMGragh G);      void All_Print(AMGragh G);      void Modify_vertex(AMGragh &G);      void Modify_Edge(AMGragh &G);      void Floyd(AMGragh G);      void Ask(AMGragh G);      void Path_Out(AMGragh G, int start, int end);

     根据校园导游咨询系统的相关功能,我们可以得到该系统的系统功能结构图,系统结构图和用例图类似,但是更加直观的展示了各个功能的结构。校园导游咨询系统功能结构图如图2所示:

     本系统的各个功能模块共涉及18个函数。 相关函数      校园导游咨询系统相关函数及其功能描述如表2所示:

函数的主要关系      校园导游咨询系统函数的调用关系图描述了该系统中各个函数调用关系以及用户使用时的操作流程,通过该图对该校园导游咨询系统的结构功能能有更清晰的认知。函数调用关系图如图3所示:

校园导游程序实验报告 第5篇

(1)查询景点信息测试样例1:

图 5-3 景点信息查询功能测试结果1

(2)查询景点信息测试样例2:

图 5-4 景点信息查询功能测试结果2

(3)查询景点信息测试样例3:

图 5-5 景点信息查询功能测试结果3

校园导游程序实验报告 第6篇

【问题描述】

设计一个校园导游程序,为来访的客人提供各种信息查询服务。

【基本要求】

(1) 设计你所在学校的校园平面图,所含景点不少于10个.以图中顶点表示校内各景点,存放景点名称、代号、简介  等信息;以边表示路径,存放路径长度等相关信息。

  (2)  为来访客人提供图中任意景点相关信息的查询。

(3) 为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。

【测试数据】

以江苏科技大学长山校区为例。

【实现提示】

一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网.顶点和边均含有相关信息.

校园导游程序实验报告 第7篇

[1]严蔚敏.数据结构(C语言版)[M]. 北京:清华大学出版社,2018. [2]谭浩强.C语言程序设计[M].北京:清华大学出版社,2018. [3]徐慧民等.C++大学基础教程[M].北京:人民邮电出版社,2005. [4]王红梅,胡明,王涛.数据结构(C++版)[M].北京:清华大学出版社,2011. [5]苏仕华.数据结构课程设计[M].机械工业出版社,2010. [6]林小茶.C语言程序设计(第二版)[M].中国铁道出版社,2010. [7]杜茂康,_兵等.C++面向对象程序设计(第2版) [M].北京:电子工业出版社,2011.

校园导游程序实验报告 第8篇

(1)查询两景点所有路径测试样例1:

图 5-9 两景点所有路径查询功能测试结果1

(2)查询两景点所有路径测试样例2:

图 5-10 两景点所有路径查询功能测试结果2

(3)查询两景点所有路径测试样例3:

图 5-11 两景点所有路径查询功能测试结果3

增加更新或删除景点信息功能

(1)增加更新景点信息测试样例1:

图 5-12 增加更新景点信息功能测试样例1

图 5-13 增加更新景点信息功能样例1测试结果1

图 5-14 增加更新景点信息功能样例1测试结果2

(2)增加更新景点信息测试样例2:

图 5-15 增加更新景点信息功能测试样例2

图 5-16 增加更新景点信息功能样例2测试结果1

图 5-17 增加更新景点信息功能样例2测试结果2

(3)增加更新景点信息测试样例3:

图 5-18 增加更新景点信息功能测试样例3

图 5-19 增加更新景点信息功能样例3测试结果1

图 5-20 增加更新景点信息功能样例3测试结果2

(4)删除景点信息功能测试样例1:

图 5-21 删除景点信息功能测试样例1

图 5-22 删除景点信息功能测试样例1测试结果1

注意:其中删除的景点全部信息置为0,不然程序会出错误。(下同)

图 5-23 删除景点信息功能测试样例1测试结果2

注意:为避免程序出错,最短路径9999999米是设定的宏定义无穷大,即为没有这条路的意思。(下同)

(5)删除景点信息功能测试样例2:

图 5-24 删除景点信息功能测试样例2

图 5-25 删除景点信息功能测试样例2测试结果1

图 5-26 删除景点信息功能测试样例2测试结果2

(6)删除景点信息功能测试样例3:

图 5-27 删除景点信息功能测试样例3

图 5-28 删除景点信息功能测试样例3测试结果1

图 5-29 删除景点信息功能测试样例3最短路径原结果

图 5-30 删除景点信息功能测试样例3测试结果

课程设计是每名学生的必经之路。对我来说,这不仅仅是一次学业任务,更是一次深化学习、自我挑战和实践的机会。在此过程中,我体验了从项目规划、设计、实现到测试的全过程,每一步都充满了挑战与收获。

面对项目,我的首个任务是需求分析与设计。在确定项目目标后,我选择合适的数据结构来支撑核心功能。这一步的重要性不言而喻,一个合适的数据结构能够大大提高程序的效率和稳定性。然而,在选择时我也曾犹豫不决,担心自己的选择是否能够满足后续的需求变更。这使我意识到,对数据结构的深入理解是做出正确选择的关键。

随着项目的推进,编程实现的过程更是考验重重。代码的每一行、每一个逻辑判断,都直接关系到程序的成败。在此过程中,我遇到了无数的问题,如内存泄漏、逻辑错误等。但正是这些问题,锻炼了我的独立思考和解决问题的能力。每当遇到困难,我都会回想数据结构的原理和特性,尝试从中找到解决问题的线索。

程序调试对于每个程序员来说都是一项核心技能。在调试过程中,我更加明白了代码质量与程序稳定性之间的关系。很多时候,问题并不是出在复杂的逻辑上,而是那些看似微不足道的细节。这也让我认识到,编程不仅仅是编写代码,更多的是对代码进行反复的审查和优化。

回顾整个课程设计的过程,我深深感受到了数据结构这门课程的重要性。它不仅仅教会我如何存储和处理数据,更重要的是培养了我的逻辑思维和问题解决能力。每一个数据结构都有其独特的魅力和应用场景,关键是要学会如何选择合适的工具来解决实际问题。

此次课程设计让我更加明白,理论与实践的结合是学习的最佳路径。只有将所学的理论知识应用到实际中,才能真正掌握其精髓。同时,我也深知自己在编程和数据结构方面还有很多不足,需要不断地学习和实践。

展望未来,我希望自己能够更加深入地研究数据结构,探索更多的应用场景。同时,我也希望能够通过更多的实践项目,不断提高自己的编程能力和解决问题的能力。

[1]彭娟,_.数据结构与算法应用教程[M].重庆大学出版社:.

[2]严蔚敏,李冬梅,吴伟民.数据结构[M].人民邮电出版社:.

[3]程海英,彭文艺,姜贵平等.数据结构案例教程(C语言版)[M].电子工业出版社:.

[4]Lambert A .C Language Programming And Boolean Expressions[M].Tritech Digital Media:2018-08-23.

[5]JB D .Programming in C[M].Laxmi:2015-11-30.

#include

#include

#include

using namespace std;

#include

#include

#include

#define INF 9999999

#define MAX 30

int dist[MAX][MAX];///距离

int path[MAX][MAX];///路径

int Stack[MAX];///路径栈

int top;///栈顶

int counts;///记录路径数

typedef struct VexNode//景点信息结构体

 int vertex;//景点编号

 char name[20];//景点名称

 char vertax_message[400];//景点介绍

}VerNode;

typedef struct maps//景点图的结构体

VerNode  v[MAX];

int vexnum;//点数

int arcnum;//边数

int edgs[MAX][MAX];//邻接矩阵

}AdjList;

int visited[MAX];

void create_vertex(AdjList &GL);//初始化校园景点及景点信息函数

void Init_Creat_maps(AdjList & GL);//初始化校园景点图函数

void Dis_menu();//展示程序菜单

void Dis_map();//展示校园景点图

void add_message(AdjList &GL);//更新或添加或删除校园景点及路径信息函数

void find_message(AdjList GL);//查询景点信息函数

void Floyd(AdjList GL);//弗洛伊德求最短路径

void Floyd_print(int s, int e,AdjList GL);//打印最短路径

void Dfs_allpaths(int s,int e,AdjList GL);//查询两景点之间所有路径函数

void message(AdjList GL);//已有景点

int main()

 {      AdjList graph;

        int key;

int start,end;

        create_vertex(graph);

        Init_Creat_maps(graph);

while(1)

      Dis_menu();

      cin>>key;

      if(key==1)

   {

               Dis_map();

       find_message(graph);

  }

              if(key==2)

   {

     message(graph);

      printf(_请输入起点的景点(编号):\n_);

      scanf(_%d_,&start);

      printf(_请输入起点的终点(编号):\n_);

      scanf(_%d_,&end);

      Floyd(graph);

      printf(_从%s到%s的最短路径是:%d米 _,[start].name,[end].name,dist[start][end]);

      printf(_%s->_,[start].name);

          Floyd_print(start,end,graph);

      printf(_%s\n_,[end].name);

   }

      if(key==3)

  {

     message(graph);

  printf(_请输入起点的景点(编号):\n_);

      scanf(_%d_,&start);

      printf(_请输入起点的终点(编号):\n_);

      scanf(_%d_,&end);

  counts=0;

  top=0;

      Dfs_allpaths(start,end,graph);

  }

      if(key==4)

  {

     message(graph);

      add_message(graph);

  }

      if(key==0)

  {

      printf(_使用结束!\n_);

      printf(_即将退出安工程校园导游系统....._);

      break;

  if(key>4||key<0)

  {

  printf(_输入有误!请重新输入!_);

  continue;

  }

return 0;

void create_vertex(AdjList &GL)

//预置初始时景点图的景点信息

[1].vertex=1;

    strcpy([1].name,_网球场_);

strcpy([1].vertax_message,_网球场是安工程校园的一个户外运动场地,提供给师生们进行网球运动的场所。这里有专业的网球场地和设施,可以让你尽情享受网球运动的乐趣。_);

[2].vertex=2;

    strcpy([2].name,_体育馆_);

strcpy([2].vertax_message,_体育馆是安工程校园内的一个综合性体育场馆,设有多个室内运动场地,如篮球场、羽毛球场、乒乓球场等。师生们可以在这里进行各种体育锻炼和比赛活动。_);

[3].vertex=3;

    strcpy([3].name,_英语角_);

strcpy([3].vertax_message,_英语角是安工程校园内一个特殊的交流区域,提供给学生们练习英语口语和交流的场所。在这里,你可以与其他同学自由对话,提高自己的英语口语能力。_);

[4].vertex=4;

    strcpy([4].name,_情人桥_);

strcpy([4].vertax_message,_情人桥是安工程校园内的一座浪漫的小桥,因其景色优美而得名。这里是情侣们约会和散步的热门地点,也是学生们放松心情的好去处。_);

[5].vertex=5;

    strcpy([5].name,_师生活动中心_);

strcpy([5].vertax_message,_师生活动中心是安工程校园的一个集休闲、娱乐、学习于一体的场所。这里有图书馆、电影院、多功能厅等设施,为师生们提供了丰富多样的活动和学习资源。\n学生处、招生就业处、校团委、校史馆、校学生会联合会、校社团联合会、校大学生艺术团在此办公。_);

[6].vertex=6;

    strcpy([6].name,_建设银行_);

strcpy([6].vertax_message,_建设银行是安工程校园内的一家银行分支机构,为师生们提供金融服务,包括存取款、贷款、理财等。方便师生们进行日常的金融交易和管理。_);

[7].vertex=7;

    strcpy([7].name,_图书馆_);

strcpy([7].vertax_message,_图书馆是安工程校园内的知识殿堂,收藏了大量的图书、期刊和电子资源,供师生们进行学习和研究使用。这里安静舒适,是学习的理想场所。_);

[8].vertex=8;

    strcpy([8].name,_校医院_);

strcpy([8].vertax_message,_校医院是安工程校园内的医疗机构,为师生们提供基本的医疗服务和健康咨询。在这里,你可以得到医生的诊断和治疗,保障自己的健康。_);

[9].vertex=9;

    strcpy([9].name,_行政楼_);

strcpy([9].vertax_message,_行政楼是安工程校园的行政管理中心,是学校各项决策和管理工作的重要场所。这里有学校领导和行政人员办公,处理学校相关的事务。_);

[10].vertex=10;

    strcpy([10].name,_国家广告产业园_);

strcpy([10].vertax_message,_国家广告产业园是安工程校园内的一个特殊园区,致力于培育和发展广告产业。这里有一些广告公司和机构设立,为师生们提供实习和就业机会。该园区也举办各类广告相关的活动和展览。_);

void Init_Creat_maps(AdjList & GL)

//初始景点图

    int i,j;

;///10个景点

;///8条双向路径

for(i=1; i<=MAX; i++) ///初始化邻接矩阵

    {

for(j=1; j<=MAX; j++)

        {

            [i][j]=INF;

        }

    }

    [1][3]=[3][1]=410;

    [1][4]=[4][1]=300;

    [2][7]=[7][2]=400;

    [2][4]=[4][2]=420;

    [3][4]=[4][3]=180;

    [4][5]=[5][4]=280;

[1][7]=[7][1]=430;

[1][2]=[2][1]=340;

void Dis_menu()

    printf(_\n\n_);

    printf(_\t\t\t****************安工程校园导游系统*********************\n_);

校园导游程序实验报告 第9篇

Floyd算法可以给出网络中任意两个结点之间的最短路径,因此它是比Dijkstra更一般的算法。Floyd算法的思想是将n个结点的网络表示为n行n列的矩阵,而矩阵中的元素Di,j表示从结点i到结点j的距离,如果两点直接没有边相连,则相应的元素就是无穷∞。 具体过程描述如下:

a.从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。 b.对于每一对结点 i 和 j,看看是否存在一个结点 k 使得从 i 到 k 再到 j 比己知的路径更短。如果是更新它,直到所有的结点都已经尝试过。

伪代码描述如下:

注意Floyd算法为了能回溯得到最短路径的结果,需要声明一个前趋结点数组,用来保存所有点的前一个结点,每次找到更短的路径时,需要更新这一数组。

推荐游览路径是从一个指定景点开始,不重复的游览完所有景点的路径,即在图中寻找一条由指定结点开始的哈密尔顿路径。这一问题可以通过类似马踏棋盘问题的算法来解决,实质上是采用了图的深度优先遍历和贪心算法的优化。 该算法具体过程描述如下:

图的数据结构与前一个算法相同,采用的还是邻接矩阵。 先将当前位置结点设置为已访问,然后根据当前的结点位置,计算下一步还能走哪些位置,并把这些位置放入到一个集合ArrayList中,每走一步,step+1。 遍历ArrayList中存放的所有位置,看看哪个可以走通,如果走通就继续,走不通就回溯。 最后判断是否完成了任务:使用step和应该走的步数比较,如果没有达到数量,则表示没有完成任务,将整个结果置0。

注意这样的搜索结果会根据策略的不同而改变,不同的策略执行的时间快慢也不一样,在这里,我们可以通过贪心算法对它进行优化,具体过程如下

在马踏棋盘算法获取下一步可以走的位置集合ArrayList之前,我们需要对ArrayList集合中点的下一步的所有集合的数目进行非递减排序。 这样在ArrayList中第一个结点就是下一步应该走的结点,我们需要优先选择它,因为它的后续结点最少,代表着需要回溯的点也越少。

采用了贪心算法优化之后,程序执行的时间效率会大大提高。