单源最短路径问题(Dijstra)

news2024/12/23 13:24:19

#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.coloradmin.cn/o/1874348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营第三十七天|01背包问题、分割等和子集

01背包问题 题目链接&#xff1a;46. 携带研究材料 文档讲解&#xff1a;代码随想录 状态&#xff1a;忘了 二维dp 问题1&#xff1a;为啥会想到i代表第几个物品&#xff0c;j代表容量变化&#xff1f; 动态规划中&#xff0c;每次决策都依赖于前一个状态的结果&#xff0c;在…

创新实训(十三) 项目开发——实现用户终止对话功能

思路分析&#xff1a; 如何实现用户终止AI正在进行的回答&#xff1f; 分析实现思路如下&#xff1a; 首先是在用户点击发送后&#xff0c;切换终止对话&#xff0c;点击后大模型终止对话&#xff0c;停止sse&#xff0c;不再接收后端的消息。同时因为对话记录存入数据库是后…

MySQL84 -- ERROR 1524 (HY000): Plugin ‘msql_native_password‘ is not loaded.

【问题描述】 MySQL 8.4版本&#xff0c;配置用户使用mysql_native_password认证插件验证用户身份&#xff0c;报错&#xff1a; 【解决方法】&#xff08;Windows, MySQL 8.4) 1、修改MySQL配置文件my.ini&#xff0c;在[mysqld]段添加mysql_native_passwordON。 2、管理员…

FastAPI教程I

本文参考FastAPI教程https://fastapi.tiangolo.com/zh/tutorial 第一步 import uvicorn from fastapi import FastAPIapp FastAPI()app.get("/") async def root():return {"message": "Hello World"}if __name__ __main__:uvicorn.run(&quo…

计算机体系结构 量化研究方法

在第一章中看到关于微处理器中dynamic energy 和 dynamic power的定义觉得有些奇怪&#xff0c;特别记录一下。 上面的定义是取决于上下文的&#xff1a;动态能量可以理解为在一个时钟周期内&#xff0c;由电容充放电消耗的能量总和&#xff0c;而动态功率则是这种能量消耗在单…

运算放大器输出相位反转和输入过压保护

运算放大器输出电压相位反转 本教程讨论两个与运算放大器相关的话题&#xff1a;输出相位反转和输入过压保护。 超过输入共模电压(CM)范围时&#xff0c;某些运算放大器会发生输出电压相位反转问题。其原因通常是运算放大器的一个内部级不再具有足够的偏置电压而关闭&#xff…

面试-Redis常见场景

1.从海量的数据里查询某一固定前缀的key (1)keys pattern指令&#xff1a; 摸清数据规模(很重要) (2)cursor&#xff1a;游标 Scan cursor [MATCH pattern] [COUNT count] 可以无阻塞的提取出指定模式的key列表 基于游标的迭代器&#xff0c;需要基于上一次的游标延续之前的迭…

【仿真建模-anylogic】开发规范

Author&#xff1a;赵志乾 Date&#xff1a;2024-06-28 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 0. 说明 实际模型开发过程中&#xff0c;对遇到的问题进行总结归纳出以下开发规范&#xff0c;仅供参考&#xff01; 1. 强制性规范 1…

云动态摘要 2024-06-28

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 [新客专享]WeData 限时特惠 腾讯云 2024-06-21 数据分类分级管理&#xff0c;构建数据安全屏障 &#xff0c;仅需9.9元&#xff01; 云服务器ECS试用产品续用 阿里云 2024-04-14 云服务器…

使用QGIS进行研究区域制图实战

目录 前言 一、QGIS的版本和数据介绍 1、关于QGIS版本 2、需要准备的数据 二、准备制图 1、制作全国区位图 2、矢量和遥感信息的编辑 三、出图编辑 1、设置主题信息 2、打印布局制作 3、美化地图 总结 前言 俗话说“一图胜千言”&#xff0c;在地理信息的领域中&…

“AI+”时代,群核科技进化成了家居设计打工人理想的样子

6月&#xff0c;2024世界智能产业博览会上&#xff0c;人工智能大模型展团以“AI大模型驱动新质生产力”为主题&#xff0c;各家企业纷纷提到了基于不同行业场景的应用。 这透露出当前的行业发展趋势强调大模型落地核心行业&#xff0c;产生业务价值。其中&#xff0c;“AI图像…

车辆轨迹预测系列 (五):Argoverse API Forecasting Tutorial代码解析

车辆轨迹预测系列 (五)&#xff1a;Argoverse API Forecasting Tutorial代码解析 文章目录 车辆轨迹预测系列 (五)&#xff1a;Argoverse API Forecasting Tutorial代码解析一、argoverse.data_loading.argoverse_forecasting_loader二、argoverse.visualization.visualize_seq…

MTK8786/MT8786芯片性能参数_规格书_datasheet

联发科MT8786(MTK8786)处理器采用了台积电12纳米FinFET技术&#xff0c;由2个Cortex A75核心和6个Cortex A55核心组成&#xff0c;其中大核A75主频为2.0GHz&#xff0c;GPU采用了ARM Mali-G52。MTK8786芯片设计极大地提升了智能设备的性能和安全等级。 MT8786采用了安全的ISP设…

如何将 ONLYOFFICE 文档 Linux 版更新到 v8.1

本指南将向您展示如何将 ONLYOFFICE 文档 Linux 版本更新到最新 8.1 版本。 ONLYOFFICE 文档是什么 ONLYOFFICE 文档是一个功能强大的文档编辑器&#xff0c;支持处理文本文档、电子表格、演示文稿、可填写表单、PDF 和电子书&#xff0c;可多人在线协作&#xff0c;支持 AI 集…

【2024大语言模型必知】做RAG时为什么要使用滑动窗口?句子窗口检索(Sentence Window Retrieval)是什么?

目录 1. 传统的向量检索方法&#xff0c;使用整个文档检索&#xff0c;为什么不行&#xff1f; 2.句子滑动窗口检索&#xff08;Sentence Window Retrieval&#xff09;工作原理 3.句子滑动窗口检索&#xff08;Sentence Window Retrieval&#xff09;的优点 1. 传统的向量检…

【高考志愿】集成电路科学与工程

目录 一、专业概述 二、课程设置 三、就业前景 四、适合人群 五、院校推荐 六、集成电路科学与工程专业排名 一、专业概述 集成电路科学与工程&#xff0c;这一新兴且引人注目的交叉学科&#xff0c;正在逐渐崭露头角。它集合了电子工程、计算机科学、材料科学等多个领域的…

ASUS/华硕天选5 FX607J系列 原厂Windows11系统

安装后恢复到您开箱的体验界面&#xff0c;带原机所有驱动和软件&#xff0c;包括myasus mcafee office 奥创等。 最适合您电脑的系统&#xff0c;经厂家手调试最佳状态&#xff0c;性能与功耗直接拉满&#xff0c;体验最原汁原味的系统。 原厂系统下载网址&#xff1a;http:…

c语言入门

c语言入门 C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好&#xff0c;可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言&#xff0c;所以说学习C语言是进入编程…

AI大模型在短视频处理和剪辑中的应用

文章目录 &#x1f680;一、背景&#x1f680;二、视频处理方向 &#x1f50e;2.1 视频分析与标注&#x1f50e;2.2 视频剪辑与特效&#x1f50e;2.3 视频内容生成与故事叙述&#x1f50e;2.4 视频后期处理与发布 &#x1f680;三、AI视频处理书籍推荐 &#x1f50e;3.1 知识要…

Qt自定义信号

1.Teacher类下定义信号signals: Student类下定义槽函数&#xff1a; Teacher.h #pragma once#include <QObject>class Teacher : public QObject {Q_OBJECTpublic:Teacher(QObject *parent);~Teacher(); signals:void Ask(); //老师向学生提问void Ask(QString str);…