使用弗洛伊德算法实现简单的校园导游咨询系统

您所在的位置:网站首页 校园导游咨询系统源代码 使用弗洛伊德算法实现简单的校园导游咨询系统

使用弗洛伊德算法实现简单的校园导游咨询系统

2024-07-13 12:15| 来源: 网络整理| 查看: 265

博主是弱校大一软件工程专业的一名学生,上学期学校开设了程序设计基础——C语言,在这学期伊始,学校开设了一门两个学分的程序设计实践课程,要求用C语言来写一个简单的程序,给了25个命题,博主在一个朋友的邀请下,选择了这个比较有意思的校园导游咨询系统。 需求如下

1、功能描述:设计你的学校的校园平面图,所含景点不少于10个。以图中顶点表示学校各景点, 存放景点名称,代号,简介等信息; 以边表示路径,存放路径长度等相关信息。 2、为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。 3、为来访客人提供图中任意景点相关信息的查询。 ……(可以补充其他功能) 测试数据:由读者根据实际情况指定。 实现提示:一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网,顶点和边均含有相关信息。

因为程序=数据结构+算法 很明显这个程序最应该选用的数据结构是图,用邻接矩阵来表示图结构。在刚开始做的时候,感觉这个需求的难点就是求出任意两个景点的最短路径,因为博主在大一上学期还自学了数据结构,知道求最短路径有两种算法,一种是迪杰斯特拉算法,另一种是弗洛伊德算法,便选择用弗洛伊德算法来求解。 还有感觉功能太过于单一,便又实现了打印学校平面图、评论以及查看评论的功能。 下面是系统功能模块图 在这里插入图片描述 每个功能文字说明 1.PrintGraph 打印出学校的平面图 2.SearchPath 运用弗洛伊德算法,计算出两个景点间的最短路径 3.SearchInfo 遍历图的存储景点名称的一维数组,查找到记录下下标,打印出景点的编号、名称、和基本信息 4.Comment 向用户提供键盘输入,将用户输入的内容写入到文件当中 5.ReadComment 读取保存用户评论的文件,并将内容依次输出到控制台 6.Exit 调用exit(0)退出程序,在退出前,调用Sleep,来实现倒计时 下面是程序的启动界面 在这里插入图片描述 这是功能一:打印学校的平面图 在这里插入图片描述 因为我没有学过C语言的图形库,这两幅图都是我的那个朋友画的,学校的平面图也是她用Visio画的,我主要负责其余的功能,我认为她做的非常的棒。 下面是程序的菜单列表 在这里插入图片描述 我一个理科男不太擅长做漂亮的界面,只是力求简洁(其实是自己懒)。 最后附上程序的源码

#include #include #include //引入字符串处理函数的头文件 #include //引入包含Sleep函数的头文件 #include #include #define MAXVEX 20 //图最大的结点数目 #define INFINITY 65535 //无穷大表示不存在弧 typedef int EdgeType; typedef struct { //定义图的每个结点信息 char name[20]; //景点的名称 int id; //景点的编号 char introduction[1000]; //景点的介绍 }VextexType; typedef struct Graph{ //定义图数据结构 VextexType vertex[MAXVEX]; //一维数组存储图的结点信息 EdgeType arc[MAXVEX][MAXVEX]; //二维数组存储图的弧的信息 int numVertexes, numEdges; //图的结点数和弧数 }MGraph; void Menu(); //显示菜单的函数 void Create(MGraph *G); //初始化图的函数 void PrintBackgrand(); //打印背景的函数 void PrintGraph(); //打印平面图的函数 void SearchPath(MGraph G, char *loc1, char *loc2); //查找最短路径的函数 void ShortestPath_Floyd(MGraph G, char *loc1, char *loc2); //弗洛伊德算法的函数 int SearchidByName(MGraph G, char *loc); //通过景点名称查找编号的函数 void SearchInfo(MGraph *G); //查找景点信息的函数 void Comment(); //评论的函数 void ReadComment(); //查看评论的函数 void Exit(); //退出程序的函数 IMAGE img1,img2,g1,g2,g3,g4,g5,g6,g7,g8,g9,g10; char *p="WELCOME TO SOUTHWEST PETROLEUM UNIVERSITY!"; char *p1="press any key to continue"; int main() { MGraph G; //定义一个图结构 Create(&G); //初始化图 PrintBackgrand(); while (1) { int choice; //需要进行的操作 Menu(); scanf("%d", &choice); system("cls"); switch (choice) { //根据输入的值选择对应的操作 case 1: //学校平面图 PrintGraph(); break; case 2: //查找两个景点的最短路径 system("cls"); char loc1[20], loc2[20]; printf("请输入您想查找最短路径的两个景点的名称:\n"); scanf("%s%s", &loc1, &loc2); if (SearchidByName(G, loc1) == -1 || SearchidByName(G, loc2) == -1){ printf("景点名称输入错误!\n"); } else{ SearchPath(G, loc1, loc2); } break; case 3: //查找景点的信息 system("cls"); SearchInfo(&G); break; case 4: //留下对西南石油大学的评论 Comment(); break; case 5: //查看评论 ReadComment(); break; case 6: //退出程序 Exit(); break; default: printf("输入错误,请重新输入!"); } system("pause"); system("cls"); } system("pause"); return 0; } //定义菜单的函数 void Menu() { printf("\n\n\n\n\n\n\n\t\t\t-------------------------------------------------------\n\n\n"); printf("\t\t\t\t欢迎使用西南石油大学校园导游咨询系统\n\n"); printf("\t\t\t\t\t请选择您需要的功能\n\n"); printf("\t\t\t\t\t1.学校平面图\n\n"); printf("\t\t\t\t\t2.查询两个景点之间的最短路径\n\n"); printf("\t\t\t\t\t3.查询景点的相关信息\n\n"); printf("\t\t\t\t\t4.留下您对西南石油大学的评论\n\n"); printf("\t\t\t\t\t5.查看评论\n\n"); printf("\t\t\t\t\t6.退出程序\n"); printf("\n\n\t\t\t-------------------------------------------------------\n\n"); } //定义初始化的函数 void Create(MGraph *G) { int i, j, k, w; FILE *fp; fp = fopen("view.txt", "r"); if (!fp) { printf("error!"); return; } if (fp) { fscanf(fp, "%d,%d", &G->numVertexes, &G->numEdges); for (i = 0; i numVertexes; i++) { fscanf(fp, "%d,%s", &G->vertex[i].id, &G->vertex[i].name); fgets(G->vertex[i].introduction, 1000, fp); } for (i = 0; i numVertexes; i++) { for (j = 0; j numVertexes; j++) { G->arc[i][j] = INFINITY; } } for (k = 0; k numEdges; k++) { fscanf(fp, "%d,%d,%d", &i, &j, &w); G->arc[i-1][j-1] = w; G->arc[j-1][i-1] = G->arc[i-1][j-1]; } fclose(fp); } else G->numEdges = 0; } //定义打印背景的函数 void PrintBackgrand() { initgraph(1000,700); loadimage(&img1,"Backgrond.jpg"); putimage(160,100,&img1); outtextxy(300,500,p); outtextxy(800,650,p1); getch(); closegraph(); } //定义打印平面图的函数 void PrintGraph() { initgraph(1100,800); loadimage(&img2,"Graph.jpg"); putimage(30,20,&img2); outtextxy(680,400,p); outtextxy(900,750,p1); getch(); closegraph(); } //定义计算最短路径的函数 void SearchPath(MGraph G, char *loc1, char *loc2) { ShortestPath_Floyd(G, loc1, loc2); } //定义弗洛伊德算法的函数 void ShortestPath_Floyd(MGraph G, char *loc1, char *loc2) { int l1, l2; l1 = SearchidByName(G, loc1); l2 = SearchidByName(G, loc2); int minDistance[MAXVEX][MAXVEX]; int path[MAXVEX][MAXVEX]; int i, j; for (i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3