单源最短路径问题(Dijstra)

#include<iostream>
using namespace std;
#define MAX 500
#define INT 999
typedef struct
{
    char vex[MAX];
    int Edge[MAX][MAX];
    int vexnum,arcnum;
}MGraph;
void InitMG(MGraph &MG)
{
    cout<<"输入顶点数和边数:";
    cin>>MG.vexnum>>MG.arcnum;
    cout<<"输入顶点:";
    for(int i=1;i<=MG.vexnum;i++)
        cin>>MG.vex[i];
    for(int i=1;i<=MG.vexnum;i++)
    {
        for(int j=1;j<=MG.vexnum;j++)
            MG.Edge[i][j]=INT;
    }
    for(int i=1;i<=MG.arcnum;i++)
    {
        int x,y;
        cout<<"输入顶点间的关系:";
        cin>>x>>y;
        int weight;
        cout<<"输入顶点间的权值:";
        cin>>weight;
        MG.Edge[x][y]=weight;
    }
}
void Print(MGraph MG)
{
    cout<<"顶点的个数:"<<MG.vexnum<<endl;
    cout<<"顶点的边数:"<<MG.arcnum<<endl;
    cout<<"顶点之间的关系:"<<endl;
    for(int i=1;i<=MG.vexnum;i++)
    {
        for(int j=1;j<=MG.vexnum;j++)
        {
            cout<<MG.Edge[i][j]<<" ";
        }
        cout<<endl;
    }
}
void Dijstra(int v,int *dist,int *prev,MGraph MG)
{
    bool a[MG.vexnum+1];
    for(int i=1;i<=MG.vexnum;i++)
    {
        dist[i]=MG.Edge[v][i];
        a[i]=false;
        if(dist[i]==INT)
            prev[i]=0;
        else
            prev[i]=v;
    }
    dist[v]=0;
    a[v]=true;
    for(int i=1;i<MG.vexnum;i++)
    {
        int temp=INT;
        int u=v;
        for(int j=1;j<=MG.vexnum;j++)
        {
            if(temp>dist[j]&&a[j]==false)
            {
                temp=dist[j];
                u=j;
            }
        }
        a[u]=true;
        for(int j=1;j<=MG.vexnum;j++)
        {
            int sum=dist[u]+MG.Edge[u][j];
            if(a[j]==false&&dist[j]>sum)
            {
                dist[j]=sum;
                prev[j]=u;
            }
        }
    }
}
void Traceback(int v,int e,int prev[])
{
    if(v==e)
    {
        cout<<v;
        return ;
    }
    Traceback(v,prev[e],prev);
    cout<<"->"<<e;
}
int main()
{
    MGraph MG;
    InitMG(MG);
    Print(MG);
    cout<<"输入源点:";
    int v;cin>>v;
    cout<<"结束位置:";
    int e;cin>>e;
    int dist[MG.vexnum+1]={0};
    int prev[MG.vexnum+1]={0};
    Dijstra(v,dist,prev,MG);
    cout<<"最短路径长度:"<<dist[e];
    cout<<"从源点"<<v<<"到结束位置"<<e<<"路径为:";
    Traceback(v,e,prev);
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/754600.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索区块链:颠覆性技术的崛起

目录 一、引言 二、区块链技术概述 三、区块链应用场景 四、区块链面临的挑战 五、区块链的未来展望 六、结语 一、引言 在数字化浪潮的推动下&#xff0c;区块链技术以其独特的去中心化、透明性和不可篡改性等特性&#xff0c;正在逐步改变我们的生活。从金融领域到供应…

树莓派4B_OpenCv学习笔记15:OpenCv定位物体实时坐标

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; 今日学习 OpenCv定位物体实时位置&#xff0c;代码来源是…

Hi3861 OpenHarmony嵌入式应用入门--LiteOS Event

CMSIS 2.0接口使用事件标志是实时操作系统&#xff08;RTOS&#xff09;中一种重要的同步机制。事件标志是一种轻量级的同步原语&#xff0c;用于任务间或中断服务程序&#xff08;ISR&#xff09;之间的通信。 每个事件标志对象可以包含多个标志位&#xff0c;通常最多为31个&…

你的编程小助手:Kimi!!【送源码】

从OpenAI发布AI大模型到现在已经快2年时间&#xff0c;中间随着新模型的不断出现&#xff0c;也让大家认识到了AI的强大之处&#xff0c;现在AI已经渗透到我们生活&#xff0c;工作的方方面面。 这期间国产大模型也在努力发展&#xff0c;不断完善&#xff0c;甚至一些大模型在…

用Vue3和Plotly.js生成多折线图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 基于 Plotly.js 的交互式折线图绘制 应用场景介绍 本代码示例展示了如何使用 Plotly.js 库创建交互式折线图。用户可以在图中点击点以添加注释&#xff0c;从而实现数据可视化和探索。此功能可广泛应用于数据…

ai智能语音机器人在电销里发挥怎样的作用

得益于语音识别技术的的进步&#xff0c;人工智能发展越来越成熟。相信作为企业的管理者&#xff0c;都遇到过这样的事&#xff1a;一个电销新人刚刚入行&#xff0c;需求经过一两个月的学习培训才能成为一名合格的销售人员。在这段学习的期间&#xff0c;企业投入的成本是没有…

PS-抠图

在一个图片中&#xff0c;当你单独用到一个人物&#xff0c;或者物品的时候&#xff0c;你可以选择抠图&#xff0c;单独把这个人物模型给扣下来&#xff0c;不要他的背景&#xff0c;不要其他物品。 在PS中&#xff0c;我们看到一个大熊猫&#xff0c;当我们想用到这个熊猫的…

快速清理Word中的嵌套表格

实例需求&#xff1a;Word文档中表格有的单元格中包含嵌套表格&#xff08;注意其中表格中有合并单元格&#xff09;&#xff0c;如下图所示。 现在需要删除单元格顶部的嵌套表格&#xff08;如上图中的表格1和表格3&#xff09;&#xff0c;如下图所示&#xff0c;如果表格较多…

友力科技广州数据中心搬迁

搬迁工作内容 1.搬迁技术工作 1)确定机房搬迁的负责人以及负责人的联系方式&#xff0c;保证在搬迁的过程中统一指挥管理。 2)确定服务器的数量&#xff0c;服务器的型号&#xff0c;服务器的配置等&#xff0c;如有需要&#xff0c;联系相关服务器的供货商或者厂家提供技术支持…

EdgeOne 边缘函数 - 构建边缘网关

目前&#xff0c;各大主流厂商都推出了自己的边缘 Serverless 服务&#xff0c;如 CloudFlare Workers、 Vercel EdgeRuntime 等&#xff1b;腾讯云 EdgeOne 边缘函数提供了部署在边缘节点的 Serverless 代码执行环境&#xff0c;只需编写业务函数代码并设置触发规则&#xff0…

免费分享:2021年全国30米分辨率最大NDVI数据集(附下载方法)

气候变化及其对陆地生态系统的影响已成为核心议题&#xff0c;备受社会各界的瞩目。植被作为地理环境的关键构成部分&#xff0c;是气候变迁与人文活动对环境影响的敏感晴雨表。其中&#xff0c;归一化植被指数&#xff08;NDVI&#xff09;可以作为衡量地面植被状况的重要指标…

【C语言】解决C语言报错:Invalid Pointer

文章目录 简介什么是Invalid PointerInvalid Pointer的常见原因如何检测和调试Invalid Pointer解决Invalid Pointer的最佳实践详细实例解析示例1&#xff1a;未初始化的指针示例2&#xff1a;已释放的指针示例3&#xff1a;返回局部变量的指针示例4&#xff1a;野指针 进一步阅…

①常用API----Math

public static int abs(int a) // 返回参数的绝对值 public static double ceil(double a) // 返回大于或等于参数的最小整数 public static double floor(double a) // 返回小于或等于参数的最大整数 public static int round(f…

ubuntu22.04编译安装tesseract

1、 为什么用自己编译安装&#xff0c;而不采用apt安装&#xff1f; 由于tesseract有很多依赖包&#xff0c;直接用deb包或者rpm包等安装包安装很复杂&#xff0c;不一定能成功安装。 2、安装基本的依赖包 sudo apt update sudo apt install g autoconf automake libtool pkg…

float8格式

产生背景 在人工智能神经元网络中&#xff0c;一个参数用1字节表示即可&#xff0c;或者说&#xff0c;这是个猜想&#xff1a;因为图像的颜色用8比特表示就够了&#xff0c;所以说&#xff0c;猜想神经元的区分度应该小于256。 数字的分配 8比特有256个码位&#xff0c;分为…

AWS云计算平台:全方位服务与实践案例

摘要 在数字化浪潮的推动下&#xff0c;云计算已成为企业转型的强大引擎。AWS作为云计算的先锋&#xff0c;不仅提供了一系列强大的基础设施服务&#xff0c;更是在人工智能领域不断探索和创新。本文将带您领略AWS的全方位服务&#xff0c;并透过实际案例&#xff0c;感受其在…

ROS2创建服务用RCLCPP实现

1.创建服务提供者service_server_01.cpp #include "example_interfaces/srv/add_two_ints.hpp" #include "rclcpp/rclcpp.hpp" class ServiceServer01 : public rclcpp::Node { public: ServiceServer01(std::string name) : Node(name) { RCLCPP_…

应对铜价飙升,慧能泰推出超高性价比240W五芯线专用eMarker芯片

全球铜价仍然居高不下&#xff0c;以前买电线论捆算&#xff0c;现在巴不得论‘克’珍藏。这年头&#xff0c;换根充电线都得三思而后行&#xff0c;考虑的不是颜色款式&#xff0c;而是‘这条线的铜含量&#xff0c;值几个涨停板&#xff1f;’ 说实话&#xff0c;铜价上涨&a…

[AHK]微信表情快捷输入

需求&#xff1a; 希望在电脑上微信聊天时用键盘快捷输入常用表情。 工具&#xff1a; AutoHotkey v1 使用说明&#xff1a; 微信中按空格显示热键提示窗口&#xff0c;输入键盘序列后&#xff0c;按空格输出相应表情 配置&#xff1a; 源代码&#xff1a; /** 脚本&…

Python之父推荐!Star 60k!深入CPython内核:揭秘内部实现细节

都说 Python 是人工智能的“天选”语言&#xff0c;为什么呢&#xff1f; 可能很多读者都知道&#xff0c;Python 的解释器是用 C 语言写的&#xff0c;所以其实我们在谈论 “Python” 的时候&#xff0c;99.9% 的情况说的就是 “CPython”&#xff01; CPython 是目前最流行的…