一,说在前面的话
大概在半年前,看见一到信息竞赛题:在任意方格阵中设置障碍物,确定起始点后,求这两点之间路径。当时觉得蛮有意思的,但是没有时间去做,今天花了两个小时来实现它。据说有一个更高级的寻路算法叫做a*,那我就把我的算法叫做W*。
这个算法主要用于解迷宫和实现战棋游戏(SLG)的寻路。首先讲一讲我的算法的思路:
我们先确定起始点,然后从起点出发,按一定顺序判断这个位置上下左右是否有可走的位置,如果发现有可走的位置,则递归进入该位置的判断。在递归的同时记录所走的路线。当发现某个位置无路可走,则删除路线的最后一个位置并返回上级位置进行判断。如此反复尝试最终找到路线。
说了这么多,就来讲解一下代码吧。
二,讲解部分
包含头文件(全部都是stl中的):
- #include<map>
- #include<vector>
- #include<iostream>
为几个冗长的类型重命名,用来使后来的代码更明了。
copy
- typedefunsignedintuint;
- typedefstd::vector<int>CRow;
- //相当于把CLabyrinth定义成一个整型的二维数组
- typedefstd::vector<CRow>CLabyrinth;