1、类型成员名描述CityNode属性Stringcityname城市名称intx城市的横坐标y城市的纵坐标CityNode*next其连接作用Class中的方法 bool Insert_CityNode(string cityname, int x, int y); (添加城市) bool Insert_CityNode_2(string cityname, int x, int y); (添加城市-文件读入) bool Insert_CityNode_3(string cityname, float x, float y);(遍历指定城市中使用) bool Search_CityNode(st
2、ring cityname); (通过城市名字查找) bool Search_CityNode(int x, int y); (用过城市坐标查找) bool Delete_CityNode(string cityname); (用过城市名字删除) bool Delete_CityNode(int x, int y); (通过城市坐标删除) float Distance(string cityname1, string cityname2); (两城市间的距离) void SaveFile(string cityname, int x, int y); (保存文件) void ReadFile(
3、); (读取文件) void Operation(); (switc语句,便于操作) void SaveAgain(); (删除节点时重新保存文件)void Clear(); (遍历指定城市后清空链表) void IsExist(int x, int y, string cityname, int &temp); (判断是否已经存在) bool Distance_In_Range(int num, int x, int y); (一定范围内的城市) bool Travel_Edge(); (将城市和坐标分别存在数组中,便于求最短路径)void Travel_Path(); (贪心算法 求最短路
4、径)bool Travel_Edge_ALL(); (遍历所有城市)bool ZDCZ(string cityname); (添加需要便利的指定城市)CityNode * head; (保存所有城市数据)CityNode * head2; (保存指定城市的信息)(3)用户手册(4)调试及测试1. 添加城市若城市已存在,则提示存在,不能添加2. 查找城市通过名称查找 通过坐标查找3. 删除城市通过名称删除通过坐标删除4.查看两城市间的距离5.查找距离定点一定距离的城市6.查找最优路径1制定城市查询最短路径2全部城市最短路径测试数据(环形数据能更好的检测)中国 9 1 合肥 9 6 广州 5 6
5、深圳 5 1 安徽 1 6 北京 1 17.查看所有城市(5)附录程序代码#includestringcmathfstreamstdlib.husing namespace std;int number = 0, number2 = 0;float Weight100100;string citys100;struct CityNode string cityname; float x, y; CityNode * next;struct minedge int vex; int low;minedge Edge100;void Travel();class CityManagepublic:
6、 CityManage(); /CityManage(); bool Insert_CityNode(string cityname, float x, float y); bool Insert_CityNode_2(string cityname, float x, float y); bool Search_CityNode(float x, float y); bool Delete_CityNode(float x, float y); void SaveFile(string cityname, float x, float y); void Clear(); void IsExi
7、st(float x, float y, string cityname, int & bool Distance_In_Range(int num, float x, float y); bool Travel_Edge_ALL(); bool ZDCZ(string cityname);private: CityNode * head; CityNode * head2;CityManage:CityManage() head = new CityNode; head-next = NULL; head2 = new CityNode; head2-bool CityManage:Inse
8、rt_CityNode(string cityname, float x, float y)/(添加城市) CityNode*p = new CityNode; p-cityname = cityname;x = x;y = y; int temp1 = 0; IsExist(x, y, cityname, temp1); if (temp1 = 0) SaveFile(cityname, x, y); cout 添加成功 next = NULL) head-next = p; p- number = 1; return true; p-next = head-next; head- numb
9、er+; return true; return true;Insert_CityNode_2(string cityname, float x, float y)/(添加城市-文件读入) if (head- number = 1; number+;Insert_CityNode_3(string cityname, float x, float y) if (head2- head2- number2 = 1;next = head2- number2+;ZDCZ(string cityname) CityNode*p; p = new CityNode; p = head- while (
10、p != NULL) if (p-cityname = cityname) Insert_CityNode_3(p-cityname, p-x, p-y); p = p-Search_CityNode(string cityname)/(通过城市名字查找) cout * cityname x ,y cout 未发现此城市 return false;Search_CityNode(float x, float y)/(用过城市坐标查找) CityNode *p;x = x &y = y)cityname while (k ! if (k- k-y = y | k-该城市已存在 temp = 1;
11、 break; k = k-Delete_CityNode(string cityname)/(用过城市名字删除) CityNode *p, *s; s = new CityNode; s = head; s-next = p- delete p;该城市已删除 number-; s = s-Delete_CityNode(float x, float y)/(通过城市坐标删除)SaveAgain() ofstream fout(City.txt, ios:out); SaveFile(p-float CityManage:Distance(string cityname1, string ci
12、tyname2)/(两城市间的距离) float c1x, c1y, c2x, c2y, dis; s = head-cityname = cityname1) c1x = p-x; c1y = p-y; /if (p-cityname != cityname1) if (p = NULL)未找到您所输入的第一个城市 return 0; while (s ! if (s-cityname = cityname2) c2x = s- c2y = s- /if (s-= cityname2) if (s = NULL)未找到您所输入的第二个城市 return 1; dis = sqrt(c1x -
13、 c2x)*(c1x - c2x) + (c1y - c2y)*(c1y - c2y);到; s-的距离为: dis x - x, 2) + pow(p-y - y, 2) next) p = head2- free(p); number2-;Travel_Edge()/(将城市和坐标分别存在数组中,便于求最短路径) p = head2- int a = 0, b = 0, c = 0; for (a = 0; a100; a+) for (b = 0; b for (b = a + 1; Weightba = Weightab = sqrt(pow(abs(p-x - s-x), 2) +
14、pow(abs(p-y - s-y), 2); s = s- for (c = 0; ccityname;Travel_Edge_ALL()number;void Travel(int Number)/(求最短路径) int i, j, k, l; int S100;/用于存储已访问过的城市 /用于存储两个城市之间的距离 float sum = 0;/用于记算已访问过的城市的最小路径长度 float Dtemp;/保证Dtemp比任意两个城市之间的距离都大(其实在算法描述中更准确的应为无穷大) int flag;/最为访问的标志,若被访问过则为1,从未被访问过则为0 /*初始化*/ i = 1; /i是至今已访问过的
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1