算法,就是(结合各种数学知识)解决问题的有限步骤,可以表现为程序、流程图。
假设要寻找一条路径,从起点S,终点G。
有几个关键原则:
1. 路径的下一个节点,不能和以往节点相同,否则会造成死循环。
2. 所有“待选”,“待算”路径,放在一个列表中;
OK,现在可以假设,有基础数据,各个点的坐标:
struct Point {
char ID;
double x;
double y;
}
各个可走路径的长度
struct distance
{
char Id1;
char id2;
double lenght;
}
那么,我们想要的结果,是:
struct Path {
List<int> Ids; //一个有序的节点集合
}
british museum算法
这个算法,说白了就是构造一颗树,没什么目的的构造,造到死胡同为止,最后看看那条包含S和G
要实现这个算法,需要两个列表,一个存放所有走到死胡同的路径R,一个存放还没走到死胡同的路径T。
被划去的路径,例如:在上一步演变到下一步中划去的。
算法开始:
1. T:(S) R:空
2. T:(S,A),(S,B) R:空
3. T:(S,A,B),(S,A,D),(S,B) R:空
4. T:(S,A,B,C),(S,A,D),(S,B) R:空
5. T:(S,A,B,C,E),(S,A,D),(S,B) R:空
6. T: