void setvalue(NODE *node1, NODE *node2)//节点(矩阵)赋值 node2赋值给node1 int main()//主函数 源代码
运行结果:
见附录五
15
六、实践六:局部最优搜索 实验名称 实验成员 实践六:局部最优搜索 负责人 开始时间 结束时间 (1)目的1:了解并理解局部最优搜索和全局最优搜索,通过旅行商最短实验目的 路径问题学习练习局部最优搜索。 (2)目的2:熟悉掌握并练习旅行商最短路径问题的局部最优搜索。 (3)目的3:学习运用局部最优搜索求解无目的的隐式图。 实验内容 实验环境和条件 实验技术流程路线 (1)内容1:旅行商问题的设计表示和存储 (2)内容2:旅行商问题局部最优搜索最短路径 软件环境:Dev-C++ 编程语言:C语言 数据来源:《基于搜索策略的问题求解》 流程:设计数据结构表示城市、城市连接的边、边的距离->构建各功能函数->主函数循环求解若干次,出现次数最多的值最小的即为最优解 #define MAXSIZE 30 //城市名称长度 #define CITYNUM 5 //城市数量 数据字典 #define ArcNum (CITYNUM-1)*CITYNUM/2 //城市连接边数,双向图 #define NEIGHBORNUM ((CITYNUM-1)-1)*(CITYNUM-1)/2 //可派生旅行商路径数 #define TRUE 1 16
#define FALSE 0 typedef int STATUS; typedef char CITYNAME[MAXSIZE];//城市名称 typedef struct ARCTYPE //城市连接边类型 { CITYNAME v,u;//两个城市 float distance;//两个城市的距离 } *MAPGRAPH; MAPGRAPH map; typedef struct { CITYNAME city[CITYNUM+1];//旅行商路径 float globaldistance;//旅行商走过的城市的总长度 } TRAVELPATH;//旅行商路径类型 TRAVELPATH trapath={{\float dist(MAPGRAPH map,CITYNAME u,CITYNAME v)//两城市之间的距离 void TraPathDis(MAPGRAPH map,TRAVELPATH *trapath)//旅行商路径总长度 void CopyTraPath(TRAVELPATH *trapath,TRAVELPATH *newtrapath)//复制旅行商路径 void ExchangeCityForTraPath(TRAVELPATH *trapath,int loci,int locj) //在旅行商路径中交换两个城市 TRAVELPATH *ExpandTraPaths(MAPGRAPH map,TRAVELPATH *trapath)//给定模块原型 路径并派生其邻近所有路径 void ClearAllTraPaths(TRAVELPATH *neighbors)//回收所有派生最近邻旅行商路径 void InitTraPath(MAPGRAPH map,CITYNAME cities[CITYNUM],CITYNAME start,TRAVELPATH *trapath) //初始化随机路径 void SearchResult(MAPGRAPH map,TRAVELPATH *trapath,TRAVELPATH *trapathres)//旅行商最短路径求解 void priTraPath(TRAVELPATH trapath)//输出路径 int main() //主函数 源代码
运行结果:
见附录六 17
七、附加
树搜索和树的路径求解地方,把原来的三个结构体改成了两个结构体,也就是把双亲节点和树节点合并了,这样就有两个结构体,简化了结构。
图搜索的地方,自创了一个删除回路函数
18
八、附录
附录一:
流程图:
19