From 31b3c58cafdc8d00cf96a5fd0ecd9ee1e03f10e5 Mon Sep 17 00:00:00 2001 From: yangtengze Date: Mon, 10 Jul 2023 11:03:16 +0800 Subject: [PATCH] code --- code/creat.h | 167 +++++++++++++++++++++++++------------- code/function.h | 84 +++++++++---------- code/main.cpp | 61 +++++++++++--- code/menu.h | 4 +- code/short.h | 58 ------------- code/tempCodeRunnerFile.h | 1 - code/type.h | 18 ++-- 7 files changed, 208 insertions(+), 185 deletions(-) delete mode 100644 code/tempCodeRunnerFile.h diff --git a/code/creat.h b/code/creat.h index 1ceadc2..314661b 100644 --- a/code/creat.h +++ b/code/creat.h @@ -12,73 +12,128 @@ G.arcnum=14; //说明图的边的数目 for(i=1;i<=G.vexnum;i++) { - G.vexs[i].no=i; + G.vexs[i].bianhao=i; } - strcpy(G.vexs[1].sight,"烟台市"); - strcpy(G.vexs[1].introduction,"山东省沿海城市,位于山东半岛中部"); - strcpy(G.vexs[2].sight,"青岛市"); - strcpy(G.vexs[2].introduction,"山东省沿海城市,位于山东半岛南部,有崂山风景区等众多景点"); - strcpy(G.vexs[3].sight,"潍坊市"); - strcpy(G.vexs[3].introduction,"景色优美,气候宜人,经济发达"); - strcpy(G.vexs[4].sight,"威海市"); - strcpy(G.vexs[4].introduction,"山东省辖地级市,位于山东半岛东端,北,东,南三面濒临 黄海"); - strcpy(G.vexs[5].sight,"东营市"); - strcpy(G.vexs[5].introduction,"山东省辖地级市,位于山东省东北部,黄河入海口的三角洲地带"); - strcpy(G.vexs[6].sight,"滨州市"); - strcpy(G.vexs[6].introduction,"山东省辖地级市,位于山东省北部、鲁北平原、黄河三角洲腹地"); - strcpy(G.vexs[7].sight,"德州市"); - strcpy(G.vexs[7].introduction,"山东省辖地级市,位于山东省西北部,北以新河为界,"); - strcpy(G.vexs[8].sight,"聊城市"); - strcpy(G.vexs[8].introduction,"山东省辖地级市,位于山东省西部,西部靠漳卫河与河 "); - strcpy(G.vexs[9].sight,"菏泽市"); - strcpy(G.vexs[9].introduction,"位于山东西南部,鲁苏豫皖交界地带,东与济宁市相邻"); - strcpy(G.vexs[10].sight,"泰安市"); - strcpy(G.vexs[10].introduction,"位于山东省中部,是鲁中地区中心城,国家历史文化名城"); - + strcpy(G.vexs[1].sight,"济南市"); + strcpy(G.vexs[2].sight,"德州市"); + strcpy(G.vexs[3].sight,"淄博市"); + strcpy(G.vexs[4].sight,"潍坊市"); + strcpy(G.vexs[5].sight,"烟台市"); + strcpy(G.vexs[6].sight,"威海市"); + strcpy(G.vexs[7].sight,"青岛市"); + strcpy(G.vexs[8].sight,"日照市"); + strcpy(G.vexs[9].sight,"临沂市"); + strcpy(G.vexs[10].sight,"济宁市"); + strcpy(G.vexs[11].sight,"泰安市"); + strcpy(G.vexs[12].sight,"滨州市"); + strcpy(G.vexs[13].sight,"菏泽市"); + strcpy(G.vexs[14].sight,"即墨市"); + strcpy(G.vexs[15].sight,"胶州市"); + strcpy(G.vexs[16].sight,"胶南市"); + strcpy(G.vexs[17].sight,"诸城市"); + strcpy(G.vexs[18].sight,"高密市"); + strcpy(G.vexs[19].sight,"安丘市"); + strcpy(G.vexs[20].sight,"莒县"); + strcpy(G.vexs[21].sight,"平度市"); + strcpy(G.vexs[22].sight,"莱西市"); + strcpy(G.vexs[23].sight,"莱阳市"); + strcpy(G.vexs[24].sight,"海阳市"); + strcpy(G.vexs[25].sight,"乳山市"); + strcpy(G.vexs[26].sight,"文登市"); + strcpy(G.vexs[27].sight,"荣成市"); + strcpy(G.vexs[28].sight,"牟平区"); + strcpy(G.vexs[29].sight,"蓬莱市"); + strcpy(G.vexs[30].sight,"栖霞市"); + strcpy(G.vexs[31].sight,"莱州市"); + strcpy(G.vexs[32].sight,"招远市"); + strcpy(G.vexs[33].sight,"龙口市"); + strcpy(G.vexs[34].sight,"昌邑市"); + strcpy(G.vexs[35].sight,"昌乐"); + strcpy(G.vexs[36].sight,"孝光市"); + strcpy(G.vexs[37].sight,"青州市"); + strcpy(G.vexs[38].sight,"临朐"); + strcpy(G.vexs[39].sight,"沂水"); + strcpy(G.vexs[40].sight,"广饶"); + strcpy(G.vexs[41].sight,"东营市"); + strcpy(G.vexs[42].sight,"沂源"); + strcpy(G.vexs[43].sight,"恒台"); + strcpy(G.vexs[44].sight,"博兴"); + strcpy(G.vexs[45].sight,"博山"); + strcpy(G.vexs[46].sight,"沂南"); + strcpy(G.vexs[47].sight,"蒙阴"); + strcpy(G.vexs[48].sight,"莱芜市"); + for(i=0;i=0&&a<=G.vexnum) { printf("编号已经存在,请重新输入\n"); scanf("%d",&a); - G.vexs[a].no=a; + G.vexs[a].bianhao = a; } else flag=0; } - printf("请输入你要连接的点权值和所需费用\n"); - scanf("%d",&b); - scanf("%d",&c); + printf("请输入你要连接的点权值\n"); scanf("%d",&d); - G.arc[a][b].money=G.arc[a][b].money=c; G.arc[a][b].length=G.arc[b][a].length=d; scanf("%s",G.vexs[a].sight); - scanf("%s",G.vexs[a].introduction); G.vexnum++; } @@ -117,10 +113,8 @@ else flag=0; } - printf("请输入你要修改的信息\n"); - scanf("%s",G.vexs[a].sight); - - scanf("%s",G.vexs[a].introduction); + printf("请输入你要修改的信息\n"); + scanf("%s",G.vexs[a].sight); } @@ -135,7 +129,7 @@ printf("城市编号 城市名称 城市介绍\n"); for (i=1; i<=G.vexnum;i++) { - printf("% -9d % -10s %-15s\n",G.vexs[i].no,G.vexs[i].sight,G.vexs[i].introduction); + printf("% -9d % -10s\n",G.vexs[i].bianhao,G.vexs[i].sight); } return 0; } @@ -145,34 +139,30 @@ 输出:输出所有的城市信息 ***********************/ - bool visited[MAXV]; - int DFS(MatGrath &G,int m)//深度优先搜索 +bool visited[MAXV]; +int DFS(MatGrath &G,int m)//深度优先搜索 +{ + int i; + printf("%d %s\n",G.vexs[m].bianhao,G.vexs[m].sight); + visited[m]=true; + for(i=1;i<=G.vexnum;i++) + { + if(G.arc[m][i].length!=INF&&visited[i]==false) { - int i; - printf("%d %s %s\n",G.vexs[m].no,G.vexs[m].sight,G.vexs[m].introduction); - visited[m]=true; - for(i=1;i<=G.vexnum;i++) - { - if(G.arc[m][i].length!=INF&&visited[i]==false) - { - DFS(G,i); - } - - } - return 0; + DFS(G,i); } - /*********************** - 功能:删除某一个边 - 输入:边两边的城市编号 - 输出:无 - ***********************/ - int delet(MatGrath &G,int y,int x) - { - - - G.arc[x][y].length=G.arc[y][x].length=INF; - return 0; - - - } \ No newline at end of file + } + return 0; +} + +/*********************** +功能:删除某一个边 +输入:边两边的城市编号 +输出:无 +***********************/ +int delet(MatGrath &G,int y,int x) +{ + G.arc[x][y].length=G.arc[y][x].length=INF; + return 0; +} \ No newline at end of file diff --git a/code/main.cpp b/code/main.cpp index 625ac62..1134052 100644 --- a/code/main.cpp +++ b/code/main.cpp @@ -48,17 +48,56 @@ int main() printf(" ■ ■欢迎使用城市公路导航系统■ ■ \n"); printf(" ■ ■■■■■■■■■■■■■■■■ ■ \n"); printf("\n"); + printf(" 编号 城市名称\n"); - printf(" 1 烟台市\n"); - printf(" 2 青岛市\n"); - printf(" 3 潍坊市\n"); - printf(" 4 威海市\n"); - printf(" 5 东营市\n"); - printf(" 6 滨州市\n"); - printf(" 7 德州市\n"); - printf(" 8 聊城市\n"); - printf(" 9 菏泽市\n"); - printf(" 10 泰安市\n"); + printf(" 1 济南市\n"); + printf(" 2 德州市\n"); + printf(" 3 淄博市\n"); + printf(" 4 潍坊市\n"); + printf(" 5 烟台市\n"); + printf(" 6 威海市\n"); + printf(" 7 青岛市\n"); + printf(" 8 日照市\n"); + printf(" 9 临沂市\n"); + printf(" 10 济宁市\n"); + printf(" 11 泰安市\n"); + printf(" 12 滨州市\n"); + printf(" 13 菏泽市\n"); + printf(" 14 即墨市\n"); + printf(" 15 胶州市\n"); + printf(" 16 胶南市\n"); + printf(" 17 诸城市\n"); + printf(" 18 高密市\n"); + printf(" 19 安丘市\n"); + printf(" 20 莒县\n"); + printf(" 21 平度市\n"); + printf(" 22 莱西市\n"); + printf(" 23 莱阳市\n"); + printf(" 24 海阳市\n"); + printf(" 25 乳山市\n"); + printf(" 26 文登市\n"); + printf(" 27 荣成市\n"); + printf(" 28 牟平市\n"); + printf(" 29 蓬莱市\n"); + printf(" 30 栖霞市\n"); + printf(" 31 莱州市\n"); + printf(" 32 招远市\n"); + printf(" 33 龙口市\n"); + printf(" 34 昌邑市\n"); + printf(" 35 昌乐\n"); + printf(" 36 孝光市\n"); + printf(" 37 青州市\n"); + printf(" 38 临朐\n"); + printf(" 39 沂水\n"); + printf(" 40 广饶\n"); + printf(" 41 东营市\n"); + printf(" 42 沂源\n"); + printf(" 43 恒台\n"); + printf(" 44 博兴\n"); + printf(" 45 博山\n"); + printf(" 46 沂南\n"); + printf(" 47 蒙阴\n"); + printf(" 48 莱芜市\n"); while(a!=9) { a=menu(); @@ -86,7 +125,7 @@ int main() modify(G); break; case 4: - printf("1-增加边,2-增加点"); + printf("1-增加边,2-增加点"); scanf("%d",&c); if(c==1) diff --git a/code/menu.h b/code/menu.h index d98c2a4..103a0b0 100644 --- a/code/menu.h +++ b/code/menu.h @@ -15,9 +15,9 @@ printf(" ┏━━━━━━━━━━━━━━━━━━━━┓\n"); printf(" ┃ 1.选择出发点和目的地 ┃\n"); - printf(" ┃ 2.查看景点信息 ┃\n"); + printf(" ┃ 2.查看城市信息 ┃\n"); printf(" ┃ 3.修改城市信息 ┃\n"); - printf(" ┃ 4.增加景点信息 ┃\n"); + printf(" ┃ 4.增加城市信息 ┃\n"); printf(" ┃ 5.输出所有城市信息 ┃\n"); printf(" ┃ 6.输出单源路径 ┃\n"); printf(" ┃ 7.DFS遍历输出 ┃\n"); diff --git a/code/short.h b/code/short.h index 20587ae..2a67263 100644 --- a/code/short.h +++ b/code/short.h @@ -66,64 +66,6 @@ void ShortestPath(MatGrath &G,int v,int w)//求两点之间的最短路径 -/*********************** -功能:用floyd算法求给出的两点之间的最好费用 -输入:出发地,目的地 -输出:地点的最少费用以及路径 -***********************/ -//Floyd算法 - -int Ppath1(MatGrath &G,int path[][MAXV],int v,int w) //前向递归查找路径上的顶点 -{ - int k; - k=path[v][w]; - if (k==-1) return 0; //找到了起点则返回 - Ppath1(G,path,v,k); //找顶点i的前一个顶点k - printf("%s->",G.vexs[k].sight); - Ppath1(G,path,k,w); //找顶点k的前一个顶点j -} - - - -void ShortestMoney(MatGrath &G,int v,int w)//求花费最少的路径 -{ - int A[MAXV][MAXV],path[MAXV][MAXV]; - int i,j,k; - for (i=0; iA[i][k]+A[k][j]) - { - A[i][j]=A[i][k]+A[k][j]; - path[i][j]=k; - } - } - - - - if (A[v][w]==INF) - { - if (v!=w) - printf("从%d到%d没有路径\n",v,w); - } - else - { - printf(" 从%s到%s路径费用:%d元人民币 路径:",G.vexs[v].sight,G.vexs[w].sight,A[v][w]); - printf("%s->",G.vexs[v].sight); //输出路径上的起点 - Ppath1(G,path,v,w); //输出路径上的中间点 - printf("%s\n",G.vexs[w].sight); //输出路径上的终点 - } - -} - - /*********************** 功能:用Dijkstra算法求给出的一点到其余个点的最短路径 diff --git a/code/tempCodeRunnerFile.h b/code/tempCodeRunnerFile.h deleted file mode 100644 index 54caf60..0000000 --- a/code/tempCodeRunnerFile.h +++ /dev/null @@ -1 +0,0 @@ -] \ No newline at end of file diff --git a/code/type.h b/code/type.h index 92855ba..397118c 100644 --- a/code/type.h +++ b/code/type.h @@ -2,28 +2,26 @@ #ifndef _TEST_H_ #define _TEST_H_ -#define NO 30 +#define M 30 #define MAXV 100 //最大顶点个数 #define INF 32767 //INF表示∞ +struct VertexType +{ int bianhao; //顶点的编号 + char sight[10]; //地点 +}; //定义顶点的类型 + struct ArcCell { int length;//边的长度,既两个地点之的长 - int money; }; //定义边的类型 -struct VertexType -{ int no; //顶点的编号 - char sight[10]; //地点 - char introduction[100]; //地点的介绍 -}; //定义顶点的类型 - struct MatGrath { int vexnum; //顶点数 int arcnum; //边数 - VertexType vexs[NO]; //在图结构体中调用点的结构体 - ArcCell arc[NO][NO]; //在图结构体中调用边的结构体 + VertexType vexs[M]; //在图结构体中调用点的结构体 + ArcCell arc[M][M]; //在图结构体中调用边的结构体 }; #endif \ No newline at end of file