基于C语言实现的(控制台)校园导航系统

基于C语言的校园导航系统

1.设计思想

利用迪杰斯特拉求单源最短路算法,设计出郑州升达经贸管理学院的校园导航,求出学校一个景点到另一个景点的最短距离及路线。

2.系统功能

将校园设计为平面图,将学校各代表景点构成一个抽象的无向带权图,顶点为景点,边的权值代表了景点间路径的长度。设计出能够帮助人们快速找到从一个景点到达另一景点的最短路径及路线;以及能够显示任意景点信息的程序。

将学校各代表景点信息及名称运用结构体进行存储,各景点之间的权值存入二维数组map 中,查询景点信息直接运用printf输出函数%s输出存储好的信息;利用迪杰斯特拉算法求出单源最短路,及输出路径。

主要功能:

  • 遍历所有景点
  • 输出任意景点信息
  • 输出任意两景点的最短路径
  • 输入错误可重新输入功能
  • 能返回上一界面功能
  • 输出学校简介、制作人页面
  • 可以正常结束程序

3.总体设计

功能模块

通过主界面选择是进入导航系统、查看学校简介、查看制作人还是退出程序;导航系统要能实现遍历所有景点、查询任意景点信息、查询任意两景点间最短路径及返回至主界面功能。

4.详细设计

4.1 详细的设计思路

  • 进入导航系统,遍历所有景点及查询两景点间的最短路径都是通过迪杰斯特拉求单源最短路算法来实现,将各景点间的权值存入二维数组map 中,通过迪杰斯特拉算法,每次找距离开始点最近的点,在通过这个点去更新别的边权值,同时将更新的点存储,放入栈中输出即为到终点所走路径。
  • 查询所有景点信息是先将景点信息存储然后输出,景点信息是利用string.h头文件中的strcpy( )函数将各景点名称及信息存入到结构体中。查询那个输出对应下标存储的字符串。
  • 返回主界面直接调用函数。

4.2 算法流程图

5.编码

5.1 数据结构定义

定义结构体顺序存储景点名称及景点信息。

cpp 复制代码
struct A		//定义结构体存储景点信息 
{
char name[100];
char jieshao[800];
}q[100];

定义二维数组存储建立无向带权图。

cpp 复制代码
int map[110][110];
for(i=1;i<=28;i++)
    for(j=1;j<=28;j++)
    {
        if(i==j)
            map[i][j]=0;
        else
            map[i][j]=inf;
    }

定义数组作为栈顺序结构存储所走过的路径。

cpp 复制代码
int p[110],l[110];
i=1;
while(p[v]!=v0)			//将路线存入栈中,正序输出 
{
    l[i++]=p[v];
    v=p[v];
}

5.2 功能函数设计

  • void cuntu() 初始化存图函数
  • void zhujiemian() 输出欢迎界面函数
  • void daohanglan() 主界面函数
  • void kaishidaohang() 开始导航函数
  • void liebiao() 景点列表函数
  • int chaxunfangshi(int x) 查询方式函数
  • int bianhao(char s\[\]) 查询景点下标函数
  • void Dijkstra(int v0,int s) 迪杰斯特拉求最短路径函数

5.3 函数流程图

cpp 复制代码
void Dijkstra(int v0,int s)		//迪杰斯特拉求最短路径,并输出路线 
{
    int min,i,j,u,v;
    int p[110],l[110];
    memset(p,-1,sizeof(p));
    memset(l,0,sizeof(l));
    memset(book,0,sizeof(book));
    for(i=1;i<=26;i++)
        {
            dis[i]=map[v0][i];
            if(dis[i]<inf)			//v0能直接到达,即上一站点为v0 
                p[i]=v0;
        }

    book[v0]=1;

    for(i=1;i<26;i++)
        {
            min=inf;
            for(j=1;j<=26;j++)			//每次找出距离v0最近点 
                {
                    if(book[j]==0&&dis[j]<min)
                    {
                        min=dis[j];
                        u=j;
                    }
                }
            book[u]=1;			//标记该点 
            for(v=1;v<=26;v++)
                {
                    if(book[v]==0&&dis[v]>dis[u]+map[u][v])			//通过最近点更新其他边 
                    {
                        p[v]=u;					//存储更新的边,即为路线 
                        dis[v]=dis[u]+map[u][v];
                    }
                }
        }
    v=s;
    i=1;
    while(p[v]!=v0)			//将路线存入栈中,正序输出 
        {
            l[i++]=p[v];
            v=p[v];
        }
    printf("\n");
    u=i-1;
    printf("路线为:\n");
    printf("%s--->",q[v0].name);
    for(i=u;i>=1;i--)
        printf("%s--->",q[l[i]].name); 
    printf("%s\n",q[s].name);
    printf("最短路径长度为:%d 米\n",dis[s]);
}

6.程序运行图

开始界面

主界面

运行界面1

运行界面2

相关推荐
Navigator_Z1 分钟前
LeetCode //C - 1275. Find Winner on a Tic Tac Toe Game
c语言·算法·leetcode
Ivanqhz7 分钟前
干涉图着色
java·服务器·网络·数据库·人工智能·深度学习
꯭自꯭闭꯭1 小时前
达梦DMDSC主备搭建
linux·服务器·数据库
硅基手札1 小时前
MCP 实战 —— 从零写一个 CRC16 服务器(保姆级)
运维·服务器·ai
AI备忘录1 小时前
(二十三)华为华三锐捷迈普思科 MLAG 跨设备配置命令(双活网关五厂商对照)
服务器·网络·华为
用户094248568031 小时前
第20章:JVM G1 GC原理、日志与调优实战
java·jvm
打工仔折腾 AI1 小时前
把模型切换交给平台:用蓝耘智能路由搭建商品评论分析工具
java·服务器·前端·后端·python·性能优化·ai agent 实战
后端LV1 小时前
Caffeine 源码详解:为什么它是最快的 Java 本地缓存——一次压测引发的源码考古
java·后端
dadaobusi1 小时前
Trace-driven 建模(基于轨迹/踪迹的建模)
java·后端·spring
杨云龙UP1 小时前
TDengine Community 超级表建表实战:统一21个TAG与DOUBLE/字符串数据模板
运维·服务器·数据库·时序数据库·tdengine·涛思数据·stable建表