数据结构_图的应用_最短路径1(迪杰斯特拉算法)

2023-11-20

例如有向图图:
用邻接矩阵存储该有向图:

 

 

迪杰斯特拉算法其步骤为:

 

 

实现代码如下:

#include<stdio.h>
#include<stdbool.h>
#define MNUM 10

typedef struct
{
    int vexs[MNUM];  //这里把数字作为顶点的代表  如果是字母可以为char vexs[MNUM];
    int arcs[MNUM][MNUM];
    int vexnum, arcnum;
}Graph;

void Creat_graph(Graph * G)
{
    int i, j, m, n, q;
    scanf("%d %d", &G->vexnum, &G->arcnum);
    for(i = 0; i < G->vexnum; i++){
        G->vexs[i] = i;
    }
    for(i = 0; i < G->vexnum; i++){
        for(j = 0; j < G->vexnum; j++){
            if(i == j)
                G->arcs[i][j] = 0;
            else
                G->arcs[i][j] = 99;
        }
    }
    for(i = 0; i < G->arcnum; i++){
        scanf("%d %d %d", &m, &n, &q);
        G->arcs[m][n] = q;
        //G->arcs[n][m] = q; //建立无向图

    }
}


void ShortestPath_Dijkstra(Graph G, int v0)
{
    int n, v, j, i, min;
    n = G.vexnum; //让n为G中顶点的个数
    bool Mark[n];
    int Lowcost[n], Front[n];   //Path存前驱 D存权值
    for(v = 0; v < n; v++){  //n个顶点依次初始话
        Mark[v] = false;
        Lowcost[v] = G.arcs[v0][v];  //将v0到各个中终点的最短路径长度设置为 v 与 v0上的权值
        if(Lowcost[v] < 99)
            Front[v] = v0;   //如果说v与v0之间有弧,则把v的前驱设置为v0
        else
            Front[v] = -1;    //如果v与v0之间没有弧相连,则把v的前驱用-1标注下来。
    }
    Mark[v0] = true;
    printf("%d ", v0);
    /*初始化结束,开始主循环,每次求得V0到某个顶点的最短路径,将v加到s*/
    for(i = 1; i < n; i++){
        min = 99;
        for(j = 0; j < n; j++){
            if(!Mark[j] && Lowcost[j] < min){
                min = Lowcost[j];
                v = j; //选择当前一个最短路径用v标记下来
            }
        }
        Mark[v] = true;
        printf("%d ", v);
        for(j = 0; j < n; j++){  //更新从v0出发到集合V-S上所有顶点的最短路径长度
            if(!Mark[j] && (Lowcost[v] + G.arcs[v][j] < Lowcost[j])){
                Lowcost[j] = Lowcost[v] + G.arcs[v][j];    //更新D[j],保证目前最短
                Front[j] = v;  //更新前驱
            }
        }
    }
}
int main()
{
    Graph G;
    Creat_graph(&G);

    int i, j;
    for(i = 0; i < G.vexnum; i++){
        for(j = 0; j < G.vexnum; j++){
            if(G.arcs[i][j] < 10)
                printf("%d      ", G.arcs[i][j]);
            else
                printf("%d     ", G.arcs[i][j]);
        }
        putchar('\n');
    } //输出
    //MiniSpanTree_Kruskal(G);
    ShortestPath_Dijkstra(G, 0);
    return 0;
}

运行结果如下:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构_图的应用_最短路径1(迪杰斯特拉算法) 的相关文章

  • CLR 2.0 与 4.0 性能比较?

    如果在 CLR 4 0 下运行 为 CLR 2 0 编译的 NET 程序会运行得更快吗 应用程序配置
  • 适合初学者的良好调试器教程[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有谁知道一个好的初学者教程 在 C 中使用调试器 我感觉自己好像错过了很多 我知道怎么做 单步执行代码并查看局部变量 虽然这常常给我带来问
  • 如何捕获未发送到 stdout 的命令行文本?

    我在项目中使用 LAME 命令行 mp3 编码器 我希望能够看到某人正在使用什么版本 如果我只执行 LAME exe 而不带参数 我会得到 例如 C LAME gt LAME exe LAME 32 bits version 3 98 2
  • GetType() 在 Type 实例上返回什么?

    我在一些调试过程中遇到了这段代码 private bool HasBaseType Type type out Type baseType Type originalType type GetType baseType GetBaseTyp
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 如何填充 ToolStripComboBox?

    我发现它很难将数据绑定到ToolStripComboBox 好像没有这个ValueMember and DisplayMember特性 怎么绑定呢 访问toolstripcombobox中包装的组合框并访问其ValueMember Disp
  • 如何使用 Castle Windsor 将对象注入到 WCF IErrorHandler 实现中?

    我正在使用 WCF 开发一组服务 该应用程序正在使用 Castle Windsor 进行依赖注入 我添加了一个IErrorHandler通过属性添加到服务的实现 到目前为止一切正常 这IErrorHandler对象 一个名为FaultHan
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • 为什么可以通过ref参数修改readonly字段?

    考虑 class Foo private readonly string value public Foo Bar ref value private void Bar ref string value value hello world
  • C# 存档中的文件列表

    我正在创建一个 FileFinder 类 您可以在其中进行如下搜索 var fileFinder new FileFinder new string C MyFolder1 C MyFolder2 new string
  • 启动时的 Excel 加载项

    我正在使用 Visual C 创建 Microsoft Excel 的加载项 当我第一次创建解决方案时 它包含一个名为 ThisAddIn Startup 的函数 我在这个函数中添加了以下代码 private void ThisAddIn
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • 可访问性不一致:参数类型的可访问性低于方法

    我试图在两个表单之间传递一个对象 基本上是对当前登录用户的引用 目前 我在登录表单中有一些类似的内容 private ACTInterface oActInterface public void button1 Click object s
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 使用 C 在 OS X 中获取其他进程的 argv

    我想获得其他进程的argv 例如ps 我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10 4 11 首先 我阅读了 ps 和 man kvm 的代码 然后编写了一些 C 代码 include

随机推荐

  • #互联网生活中的隐私保护:用隐私换便利还是花钱护隐私?# 隐私保护与个人信息安全:在便利与隐私之间的取舍

    文章目录 1 看法 2 互联网生存指南 通过哪些方法来加强个人信息保护 2 1 加强个人信息安全意识 2 2 使用强密码和多因素认证 2 3 更新操作系统和软件 2 4 谨慎使用公共Wi Fi网络 2 5 定期备份个人数据 2 6 注意社交
  • Qt之自定义布局管理器(QBorderLayout)

    简述 QBorderLayout 顾名思义 边框布局 实现了排列子控件包围中央区域的布局 具体实现要求不再赘述 请参考前几节内容 简述 实现效果源码 使用 实现 QBorderLayout主要采用QLayout和QWidgetItem实现
  • MySQL 代替in/not in 的sql语句

    1 in和exists in是把外表和内表作hash连接 而exists是对外表作loop循环 每次loop循环再对内表进行查询 一直以来认为exists比in效率高的说法是不准确的 如果查询的两个表大小相当 那么用in和exists差别不
  • Textbooks Are All You Need

    本文是LLM系列文章 针对 Textbooks Are All You Need 的翻译 课本是你全部所需要的 摘要 1 引言 2 训练细节和高质量数据的重要性 3 对CodeExercise进行微调后的模型能力峰值 4 LLM评分对非常规
  • 【Python高级之定时器】

    Python高级之定时器 定时器 定时器 如果需要使用定时器去触发一些事件 Python中通过线程实现定时器timer 定时器的意思也是 一段时间后调用一个函数 用法 import threading def fun timer print
  • …\OBJ\LED.axf: Error: L6218E: Undefined symbol EXTI_Init (referred from exti.o). 错误修改

    OBJ LED axf Error L6218E Undefined symbol EXTI Init referred from exti o 错误修改 今天在移植野火的程序到元子的开发平台上时候 发现自己在中断初话中断函数的时候出现了
  • 【C语言】 函数

    函数 在计算机科学中 子程序 一个大型程序中的某部分代码 由一个或多个语句块组 成 它负责完成某项特定任务 而且相较于其他代 码 具备相对的独立性 一般会有输入参数并有返回值 提供对过程的封装和细节的隐藏 这些代码通常被集成为软 件库 C语
  • 深度学习目标跟踪算法

    ECCV 2022 OSTrack Joint Feature Learning and Relation Modeling for Tracking https blog csdn net qq 41442511 article deta
  • osgEarth的Rex引擎原理分析(七十)TileRenderModel中的RenderingPass和RenderBindings

    目标 五十五 中的问题141 TileRenderModel中的RenderingPass和RenderBindings RenderingPass渲染通道主要存放Samplers采样器列表 采样器存放的是用来渲染影像 高程的纹理和矩阵 R
  • 配置pysot- toolkit

    这个大家都没遇见啥困难 但是我就踩了比较多雷 作者的github库 不是我的 https github com StrangerZhang pysot toolkit 安装步骤 参考链接会放在后面 需要的环境 我是在Windows下配置的
  • Latex符号表——文本/数学模式通用符号

    目录 简介 速览图 详细列表 简介 这篇博客用来记录文本 数学模式通用符号 这些符号可用于文本和数学模式 速览图 详细列表 符号 命令
  • 32. 实战:PyQuery实现抓取TX图文新闻

    目录 前言 链接在评论区 链接在评论区 链接在评论区 目的 链接在评论区 链接在评论区 链接在评论区 思路 链接在评论区 链接在评论区 链接在评论区 代码实现 1 拿到页面源代码 2 解析html文件 3 拿到标题和内容 4 下载图片 5
  • 【seaweedfs】3、f4: Facebook’s Warm BLOB Storage System 分布式对象存储的冷热数据

    论文地址 Facebook的照片 视频和其他需要可靠存储和快速访问的二进制大型对象 BLOB 的语料库非常庞大 而且还在继续增长 随着BLOB占用空间的增加 将它们存储在我们传统的存储系统 Haystack 中变得越来越低效 为了提高我们的
  • Keil注释中的中文字体乱码解决方法

    1 刚刚安装好keil发现选中keil的注释部分会乱码 而且修改注释也会出现莫名的乱文 2 在edit configuration中 Editor Encoding改为Chinese GB2312即可 需要将乱码删掉 重新输入就不会出现乱码
  • java 多线程学习笔记之 线程实现(线程阻塞)

    java 实现线程方法主要分为两种方法 一种是继承 java lang Thread 另一种实现java lang Runnable接口 对于直接继承Thread 的类来说 代码大致框架是 public class MyThread ext
  • springboot整合shiro的坑记录

    首先我参考文章 https blog csdn net Yearingforthefuture article details 117384035 进行学习 由于此文章没有讲springboot的版本 我于是用了idea2022 3 1的默
  • JVM调优常用命令

    windows系统本人在jdk的bin目录操作 1 jps 查看系统中的进程 2 jmap jmap histo 进程号 gt D log txt 查看内存信息 实例个数及占用内存大小 也可以不要后面的路径 在控制台展示 jamp heap
  • linux 字符串数组定义,Shell脚本(一) -- 开始、变量、字符串、数组

    一 什么是Shell Shell编程就是对一堆Linux命令的逻辑化处理 应用 例 举个简单的例子 我们做pythonweb开发的 在以前 如果要在本地将程序打包 然后部署到远程服务器 抛开现在的ci 原始的方法 我们以前的做法通常会经历如
  • C++ char类型打印为空

    学过C的应该都知道char类型是专门用来存储字符的 如 a 1 等等 大部分人也就局限于此 但实际上char类型是一种整型 8位的整型 也有类库定义为int8 计算机只能存储0 1 也就是数字 从计算机结构来说 也注定不能存储 a b 等字
  • 数据结构_图的应用_最短路径1(迪杰斯特拉算法)

    例如有向图图 用邻接矩阵存储该有向图 迪杰斯特拉算法其步骤为 实现代码如下 include