我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++基于Floyd算法实现校园导航系统

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++基于Floyd算法实现校园导航系统

本文实例为大家分享了C++基于Floyd算法实现校园导航系统的具体代码,供大家参考,具体内容如下

首先是配置文件

//文件名'MGraph.h'
//用途:创建邻接矩阵
#include<iostream>
#include<stdlib.h>
using namespace std;

#define MaxInt 32767 //表示极大值
#define MaxNum 100  //表示最大顶点数
typedef int status;
typedef string VerTexType;  //顶点的数据类型
typedef int ArcType;  //边的权值为整型
typedef struct
{
    VerTexType vexs[MaxNum];   //顶点表
    ArcType arcs[MaxNum][MaxNum];   //邻接矩阵
    int vexnum,arcnum;//当前的点和边数
    char name[MaxNum];
}AMGraph;

status CreateMap(AMGraph &G)//地图的创建 
{
    G.vexnum=10; 
    G.arcnum=13;
    G.vexs[0]="北门";
    G.vexs[1]="下沉广场";
    G.vexs[2]="青年公寓";
    G.vexs[3]="齐贤广场";
    G.vexs[4]="15教";
    G.vexs[5]="菜鸟驿站";
    G.vexs[6]="汇森楼";
    G.vexs[7]="图书馆";
    G.vexs[8]="体育馆";
    G.vexs[9]="南苑餐厅";
    
    for(int i=0;i<MaxNum;i++)//初始化所有顶点之间距离 
    {
        for(int j=0;j<MaxNum;j++)
        {
            G.arcs[i][j] = MaxInt;
        }
    }
    //各顶点之间距离
    G.arcs[0][1] = G.arcs[1][0] = 300;    
    G.arcs[0][2] = G.arcs[2][0] = 600;    
    G.arcs[1][2] = G.arcs[2][1] = 200;    
    G.arcs[2][3] = G.arcs[3][2] = 600;    
    G.arcs[2][6] = G.arcs[6][2] = 1000;
    G.arcs[3][4] = G.arcs[4][3] = 100;    
    G.arcs[3][6] = G.arcs[6][3] = 800;    
    G.arcs[4][5] = G.arcs[5][4] = 100;    
    G.arcs[4][8] = G.arcs[8][4] = 400;
    G.arcs[5][9] = G.arcs[9][5] = 700;
    G.arcs[6][7] = G.arcs[7][6] = 100;
    G.arcs[7][8] = G.arcs[8][7] = 100;
    G.arcs[8][9] = G.arcs[9][8] = 300;
}

具体方法实现

#include<iostream>
#include<stdlib.h>
#include"MGraph.h" 
using namespace std;


int shortPath[MaxNum][MaxNum];//最短路径长度 
int Path[MaxNum][MaxNum];//保存下一个节点 
void ShortestPath_Floyd(AMGraph G)//弗洛依德算法
{
    int i,j,k;
    for(i=0;i<G.vexnum;i++)//循环遍历所有顶点(横列) 
    {
        for(j=0;j<G.vexnum;j++)//循环遍历所有顶点(竖列)
        {
            shortPath[i][j]=G.arcs[i][j];//保存权值 
            if(shortPath[i][j]<MaxInt&&i!=j) 
                Path[i][j]=j;//保存下一个顶点下标 
            else Path[i][j]=-1;
        }
    }
    //算法核心语句 
    for(k=0;k<G.vexnum;k++)//遍历所有点(作为中点) 
    {
        for(i=0;i<G.vexnum;i++)//遍历行 
        {
            for(j=0;j<G.vexnum;j++)//遍历列 
            {
                //松弛操作 如果经历k点距离小于两点之间距离,选择经过k点的路线 
                if(shortPath[i][k]+shortPath[k][j]<shortPath[i][j])
                {
                    shortPath[i][j]=shortPath[i][k]+shortPath[k][j];
                    Path[i][j]=Path[i][k];//更新操作 
                }
            }
        }
    }
}

void math()//次级界面
{
    int a,b,i,j,k,m,n;
    AMGraph G;
    CreateMap(G);
    ShortestPath_Floyd(G);    //弗洛依德算法
    cout<<"1.北门 2.下沉广场 3.青年公寓 4.齐贤广场 5.15教"<<endl;
    cout<<"6.菜鸟驿站 7.汇森楼 8.图书馆 9.体育馆 10.南苑餐厅"<<endl;
    cout<<"输入起点的序号"<<endl;
    cin>>a;
    cout<<"输入终点的序号"<<endl;
    cin>>b;
    m=a-1;
    n=b-1;
    cout<<"最短路径:"<<shortPath[m][n]<<"米"<<endl;
    cout<<"路径为:"<<G.vexs[m];
    k=Path[m][n];
    while(k!=n)
    {
        cout<<" -> "<<G.vexs[k];
        k=Path[k][n];
    }
   cout<<" -> "<<G.vexs[n]<<endl;

}
void scence()//显示地图 
{
    cout<<"\t\t--------------------------------------------------------"<<endl;
    cout<<"\t\t|       北门                                           |"<<endl; 
    cout<<"\t\t|                                                      |"<<endl;
    cout<<"\t\t|  下沉                                                |"<<endl;
    cout<<"\t\t|  广场           青年                                 |"<<endl;
    cout<<"\t\t|                 公寓                                 |"<<endl;
    cout<<"\t\t|                                                      |"<<endl;
    cout<<"\t\t|                                   菜鸟               |"<<endl;
    cout<<"\t\t|                          15教     驿站               |"<<endl;
    cout<<"\t\t|                                                      |"<<endl;
    cout<<"\t\t|                    齐贤广场                          |"<<endl;
    cout<<"\t\t|                                               南苑   |"<<endl;
    cout<<"\t\t|                                               餐厅   |"<<endl;
    cout<<"\t\t|               汇森楼                                 |"<<endl;
    cout<<"\t\t|                         图书馆    体育馆             |"<<endl;
    cout<<"\t\t--------------------------------------------------------"<<endl;
}

void Gui()//主界面
{
    char a;
    cout<<"\t\t\t┌--------------------------------┐"<<endl;
    cout<<"\t\t\t│                                │"<<endl;
    cout<<"\t\t\t│   欢迎使用南工校园导航系统     │"<<endl;
    cout<<"\t\t\t│                                │"<<endl;
    cout<<"\t\t\t│--------------------------------│"<<endl;
    cout<<"\t\t\t│      1. 查看校园全貌           │"<<endl;
    cout<<"\t\t\t│      2. 计算最短路径           │"<<endl;
    cout<<"\t\t\t│      3. 退出导航系统           │"<<endl;
    cout<<"\t\t\t└--------------------------------┘"<<endl;
    while(true){
    cout<<"\t\t\t输入要操作的序号(1-3):";
        cin>>a;
        (int)a;
        if(a>'0'&&a<='3')
            switch(a)
            {
                  case '1': scence(); break;
                  case '2': math(); break;
                  case '3': cout<<"\t\t\t感谢您的使用!";exit(0);break;
              }
          else cout<<"\t\t\t请输入1-3!!"<<endl; 
    }   
}

int main()
{
    Gui();
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++基于Floyd算法实现校园导航系统

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++如何实现校园导游系统

这篇文章主要介绍“C++如何实现校园导游系统”,在日常操作中,相信很多人在C++如何实现校园导游系统问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++如何实现校园导游系统”的疑惑有所帮助!接下来,请跟着小编
2023-06-29

Java怎么实现的具有GUI的校园导航系统

小编给大家分享一下Java怎么实现的具有GUI的校园导航系统,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!java基本数据类型有哪些Java的基本数据类型分为:1
2023-06-14

如何使用C语言实现校园导游系统

这篇文章主要介绍了如何使用C语言实现校园导游系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。设计目的中国地大物博,文化底蕴颇深,旅游资源更是丰富多彩,也越来越流行“大学打卡
2023-06-29

如何使用C++实现简单校园导游系统

小编给大家分享一下如何使用C++实现简单校园导游系统,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下#include #includ
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录